2014-09-02 99 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