未定义引用符号'pthread_key_delete @@ GLIBC_2.2.5

imo*_*tal 14 linux linker-errors undefined-reference

我正在尝试在Ubuntu中创建一个文件,当我让我不断收到此错误:

/usr/bin/ld: ../../gtest-1.7.0/libgtest.a(gtest-all.cc.o): undefined reference to symbol     'pthread_key_delete@@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
Run Code Online (Sandbox Code Playgroud)

我看到有人提到要进入Makefile并将'-L/lib64 -l pthread'添加到变量LDFLAGS但是你怎么做?这里完全是Linux的新手= X.

小智 19

通过添加解决了上述链接问题

-lpthread -lm to CMakeLists.txt (target link libraries for luxrender);
TARGET_LINK_LIBRARIES(... -lpthread -lm)
Run Code Online (Sandbox Code Playgroud)


小智 7

我遇到了同样的问题:-lpthread应该是你的链接调用的最后一个(与静态和共享符号的混合有关)

所以使用CMake:${CMAKE_THREAD_LIBS_INIT}应该是最后一个.例如:

target_link_libraries(mytestlib
  ${BINARY_DIR}/libgmock.a
  glog
  gflags
  ${Boost_LIBRARIES}
  ${CMAKE_THREAD_LIBS_INIT}
)
Run Code Online (Sandbox Code Playgroud)

对于OP:在CMakeLists.txt中为您正在构建的项目搜索"线程"并粘贴这些部分(或链接您尝试构建的项目,如果它是开源的) - 如果以上不是自我解释