2014-09-02 73 views
11

我试图让Ubuntu的一个文件,当我让我不断收到此错误:未定义的参考符号“pthread_key_delete @@ GLIBC_2.2.5

/usr/bin/ld: ../../gtest-1.7.0/libgtest.a(gtest-all.cc.o): undefined reference to symbol  '[email protected]@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]: *** [src/tests/run_tests] Error 1 
make[1]: *** [src/tests/CMakeFiles/run_tests.dir/all] Error 2 
make: *** [all] Error 2 

我看到有人提进入Makefile中和将'-L/lib64 -l pthread'添加到变量LDFLAGS中,但是您怎么做?全新这里的linux = X

+0

我看到同样的事情解决了,并希望得到一个CMake的,奥里答案。 – 2014-10-30 17:53:52

回答

2

我打了同样的问题:-lpthread应该是最后在你的链接调用 (具有的静态混合和共享的符号做)

所以通过CMake:${CMAKE_THREAD_LIBS_INIT}应持续。例如:

target_link_libraries(mytestlib 
    ${BINARY_DIR}/libgmock.a 
    glog 
    gflags 
    ${Boost_LIBRARIES} 
    ${CMAKE_THREAD_LIBS_INIT} 
) 

而对于OP:搜索中的CMakeLists.txt“线程”您正在建设的项目和粘贴那些项目,你正在试图建立,如果它是开源的部分(或链接) - 如果上面不言自明

+1

这更像是一个跨平台的适当答案。在Mac和Linux上编译有不同的要求,这可以防止任何丑陋的if(APPLE)东西。 – David 2016-10-10 20:13:32

15

上述问题联系起来,通过添加

-lpthread -lm to CMakeLists.txt (target link libraries for luxrender); 
TARGET_LINK_LIBRARIES(... -lpthread -lm) 

最好的问候,

+1

这个问题可以在不使用Makefile的情况下解决吗? – 2015-06-24 12:34:10

+0

为我解决了这个问题,在我无法控制环境的群集上编译一个开源项目。干杯。 – domini1000 2017-03-12 13:19:19