G ++无法在某些库中链接,但是分别使用ld可以找到库

时间:2015-02-12 17:25:20

标签: c++ linux gcc linker

在Ubuntu Linux机器上,g ++似乎没有像它那样链接库。我无法提供完整的源代码,但实质上它是一个创建pthread的小程序。它在其他两台Debian机器上编译得很好,但是在Ubuntu机器上,它抱怨对pthread_create的未定义引用。

命令行是这样的:

g++ -I. -lpthread source_code.cpp -o program

为了调试这个我在strace下运行g ++来看看它是如何寻找libpthread的。当我这样做时,我没有看到任何对libpthread的引用。好像链接器甚至没有尝试搜索库。在编译的机器上,当它在文件系统中搜索库时,我看到几次调用open()。

当我单独运行ld时,它似乎没有问题地找到libpthread,并且strace输出确认它正在搜索它应该的库。我像这样单独运行ld:

user@machine:~/src$ ld -lpthread
ld: warning: cannot find entry symbol _start; not setting start address

为什么可能导致g ++没有正确地搜索文件系统的库,而ld似乎只是这样做好了?那时候有点难过。

谢谢!

1 个答案:

答案 0 :(得分:1)

要在gcc中启用多线程,您应该传递-pthread标志而不是-lpthread -

  

-pthread

       Add support for multithreading using the POSIX threads library.                
       This option sets flags for both
       the preprocessor and linker.  
       It does not affect the thread safety of object code produced by the
       compiler or that of libraries supplied with it.