我试图在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
我看到有人提到要进入Makefile并将'-L /lib64 -l pthread‘添加到变量LDFLAGS中,但您如何做到这一点呢?linux全新入门,这里=X
发布于 2015-02-20 18:49:37
上面的链接问题是通过添加
-lpthread -lm to CMakeLists.txt (target link libraries for luxrender);
TARGET_LINK_LIBRARIES(... -lpthread -lm)
发布于 2015-01-17 13:19:50
我遇到了同样的问题:-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中搜索"thread“并粘贴这些部分(或者如果你正在尝试构建的项目是开源的,则链接它)-如果上面的内容不是不言而喻的话
发布于 2018-09-17 23:01:38
如果您正在使用Make或其他工具进行构建,请将-pthread
添加到编译命令行(因此,GCC将生成线程安全的静态局部变量)和链接命令行(因此,GCC会告诉链接器做正确的事情,最明显的是使用-lpthread
进行链接)。
如果你是用CMake构建的,那么你很可能需要这些(full example):
# always
FIND_PACKAGE(Threads REQUIRED)
# if using boost
SET(Boost_USE_MULTITHREADED ON)
TARGET_LINK_LIBRARIES(my_app ... ${CMAKE_THREAD_LIBS_INIT})
https://stackoverflow.com/questions/25617839
复制相似问题