Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 对符号'的未定义引用;pthread_key_delete@@GLIBC_2.2.5_Linux_Linker Errors_Undefined Reference - Fatal编程技术网

Linux 对符号'的未定义引用;pthread_key_delete@@GLIBC_2.2.5

Linux 对符号'的未定义引用;pthread_key_delete@@GLIBC_2.2.5,linux,linker-errors,undefined-reference,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

我正试图在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的全新版本here=X

我遇到了同样的问题:-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中搜索您正在构建的项目的“线程”,并粘贴这些部分(或链接您正在尝试构建的项目,如果它是开源的)-如果上述内容不是自解释的,则通过添加

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

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

如果您正在使用CMake进行构建,那么您很可能需要这些():


我也看到了同样的情况,希望能有一个面向CMake的答案。这是一个更适合跨平台的答案。在Mac和Linux上编译有不同的要求,这可以防止任何丑陋的
if(APPLE)
东西。为我解决了这个问题,在我无法控制环境的集群上编译一个开源项目。干杯,这只是部分正确。如果GCC不能正确链接它,它可能也在没有线程安全静态局部变量的情况下编译了它。在编译器和链接器命令行上添加
-pthread
,应该可以做到这一点。
# always
FIND_PACKAGE(Threads REQUIRED)

# if using boost
SET(Boost_USE_MULTITHREADED ON)

TARGET_LINK_LIBRARIES(my_app ... ${CMAKE_THREAD_LIBS_INIT})