定位C / C ++库中的哪些方法与* NIX链接

在过去,当我懒惰的时候 (对于Linux和Windows),只要在每个可能的libpath(即/ lib,/ lib64,/ usr / lib,等等),我知道库驻留在,看看我能猜测哪些库是可能的候选人链接,并确保添加“-L”path和“-l”lib文件。

对于大多数MSDNlogging的库,通常情况下,Microsoft已经足够好了,可以指出要链接哪个DLL,但是对于Linux来说,这需要更多的工作(即,我需要在多个站点上使用search引擎)。 例如,让我们把ntohl(), MSDN好心地显示静态.lib和dynamic.dll文件我可以链接(这将是很好的知道的path,但我可以'find')。 例如,如果我是“ 男人3 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),这与find正确的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获取更多信息。