在linux上链接问题(找不到相应库的名称)

时间:2011-05-06 18:21:46

标签: c++ c linux linker xmpp

我尝试使用库(http://code.google.com/p/qxmpp/)但我找不到要将其链接到的库的名称。我想了解如何找到要在链接参数中使用的库的名称。

2 个答案:

答案 0 :(得分:2)

看起来这只是一个源存档 - 不包含二进制文件。你从它建立了图书馆吗?构建过程在哪里? /usr/lib/usr/local/lib是常见的嫌疑人,但请阅读包中的构建和安装文档。

答案 1 :(得分:1)

鉴于库的名称是libqxmpp.a并且(正如您在评论中提到的那样)它位于通常的lib目录(/usr/lib)中,您可以轻松推断出正确的选项:

gcc和其他编译器有一个-l开关,可根据您提供的名称查找库。默认情况下,它会查看在构建时(通常为/lib/usr/lib)以及给予/etc/ld.so.conf的任何其他路径的GCC路径。如果您添加了开关-lX,它将 lib添加到名称中,默认情况下追加 .so并查找任何文件在它知道的任何lib目录中看起来都像libX.so

向后工作,我们可以推断,使用gcc调用-lqxmpp将查找名为libqxmpp.so的文件(实际上,它也会查找其他一些名称。)我们如何让它来寻找.a文件?那些ar韭菜(man ar)是静态库,因此请在库之前传递-static开关:

gcc -o progname your.o program.o files.o -static -lqxmpp

(如果您需要链接到其他库,如果您不希望它们静态链接或静态库不可用,则可能需要为它们添加-Wl,-dynamic。)

或者,如果您知道完整路径,则可以执行此操作:

gcc -o progname your.o program.o files.o /usr/lib/libqxmpp.a

......它的工作原理相同。