簡體   English   中英

在* NIX上查找C / C ++庫中要鏈接的方法

[英]Locating which methods in C/C++ libraries to link against on *NIX

在過去,當我非常懶惰時 (對於Linux和Windows),只有在每個可能的lib路徑中大膽使用“grep -r”(即/ lib,/ lib64,/ usr / lib,等我知道libs所在的,看看我是否能猜出哪些lib是可能的鏈接對象並確保添加“-L”路徑和“-l”lib文件。

對於大多數MSDN記錄的庫,通常,Microsoft足以指示要鏈接哪個DLL,但對於Linux來說,它需要更多的工作(即我需要在多個站點上使用搜索引擎)。 例如,讓我們拿ntohl(), MSDN友好地顯示我可以鏈接的靜態.lib和動態.dll文件(知道路徑會很好,但我以后可以“找到”)。 例如,如果我說' ntohl ',它最好能告訴我的是我需要#include arpa / inet.h ,但我仍然需要找出(對我來說,grep)哪個lib鏈接(也許ntohl()不是一個很好的例子,因為它通常是libc.so的一部分,但是請耐心等待,重點是,我必須grep才能發現它在libc.so上)。

問:找到C / C ++庫方法的正確(實踐)方法是什么,它們可以准確地告訴我哪些二進制文件具有我想要鏈接的方法的實現?

注意:請忽略版本(即libc-2.19.so vs libc-xx.so)和arch / target(i386-linux-gnu vs x86_64-linux-gnu),這不如找到正確的lib文件那么重要有鏈接的實際實現。

通常,除非另有說明,否則所有函數都來自默認情況下編譯器將鏈接的默認C或C ++庫。

否則,期望庫函數的手冊頁將明確指示必須鏈接非默認庫。 例如, pthread_create(3)的手冊頁告訴您需要使用-lpthread鏈接。

當然,必須依賴提供足夠文檔的第三方庫,或者通過提供傳統的手冊頁,提供這種方式的鏈接指令,或者通過其他一些文檔。 通常,圖書館的網站將提供解釋如何使用圖書館的文檔。

Linux不受強制統一文檔要求的單一實體的控制。

許多軟件包使用pkg-config或他們自己的版本,如mysql_config

您可以使用這些工具將標志添加到編譯器:

g++ $(pkg-config somelib --cflags) -o prog prog.cpp $(pkg-config somelib --libs)

否則,我使用包管理器來告訴給定包中包含哪些庫以及它們的安裝位置。

要通過pkg-config使用以下方法來發現可用的庫:

pkg-config --list-all

使用man pkg-config獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM