首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对符号'pthread_key_delete@@GLIBC_2.2.5‘的引用未定义

对符号'pthread_key_delete@@GLIBC_2.2.5‘的引用未定义
EN

Stack Overflow用户
提问于 2014-09-02 15:17:17
回答 3查看 26.1K关注 0票数 23

我试图在Ubuntu中创建一个文件,当我这样做时,我总是收到这个错误:

代码语言:javascript
运行
复制
/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

EN

回答 3

Stack Overflow用户

发布于 2015-02-20 18:49:37

上面的链接问题是通过添加

代码语言:javascript
运行
复制
-lpthread -lm to CMakeLists.txt (target link libraries for luxrender);
TARGET_LINK_LIBRARIES(... -lpthread -lm)
票数 23
EN

Stack Overflow用户

发布于 2015-01-17 13:19:50

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

所以对于CMake:${CMAKE_THREAD_LIBS_INIT}应该在最后。例如:

代码语言:javascript
运行
复制
target_link_libraries(mytestlib
  ${BINARY_DIR}/libgmock.a
  glog
  gflags
  ${Boost_LIBRARIES}
  ${CMAKE_THREAD_LIBS_INIT}
)

对于OP:在你正在构建的项目的CMakeLists.txt中搜索"thread“并粘贴这些部分(或者如果你正在尝试构建的项目是开源的,则链接它)-如果上面的内容不是不言而喻的话

票数 11
EN

Stack Overflow用户

发布于 2018-09-17 23:01:38

如果您正在使用Make或其他工具进行构建,请将-pthread添加到编译命令行(因此,GCC将生成线程安全的静态局部变量)和链接命令行(因此,GCC会告诉链接器做正确的事情,最明显的是使用-lpthread进行链接)。

如果你是用CMake构建的,那么你很可能需要这些(full example):

代码语言:javascript
运行
复制
# always
FIND_PACKAGE(Threads REQUIRED)

# if using boost
SET(Boost_USE_MULTITHREADED ON)

TARGET_LINK_LIBRARIES(my_app ... ${CMAKE_THREAD_LIBS_INIT})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25617839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档