我有以下问题。在我的Ubuntu上,我尝试构建一个项目并收到以下链接器错误:
/usr/bin/ld:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_thread.a(once.o): undefined reference to symbol 'pthread_once@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO
missing from command line collect2: error: ld returned 1 exit status
make[2]: *** [sunprint] Error 1 make[1]: ***
[CMakeFiles/sunprint.dir/all] Error 2 make: *** [all] Error 2
*** Failure: Exit code 2 ***
我在ubuntu 13桌面,GCC 4.8,boost ver下运行。是1.54。作为我正在使用的IDE 是KDevelop。 如果需要,我可以提供有关此问题的任何其他信息,但现在我仍然坚持 这个链接问题。
有什么想法吗? 提前完成。
答案 0 :(得分:13)
add_definitions
只为预处理器添加输入,即使在编译器开始其业务之前就已开始运行,甚至在链接可执行文件之后距离更远,步骤ld
应该是这样做的。
你希望ld
解决链接时依赖性的是CMake命令target_link_libraries
,对于给定的目标,它在编译后添加许多要链接的库。
在您的情况下,适当的调用可能如下所示
target_link_libraries(${PROJECT_NAME} [...] -lpthread [...]) #obviously without the '[...]' and the correct target name
答案 1 :(得分:1)
我有一个类似的问题,但mpich
。这两种:
target_link_libraries(${PROJECT_NAME} [...] -lmpich [...])
和
target_link_libraries(${PROJECT_NAME} [...] mpich [...])
工作正常。