我遇到了错误
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/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
在通过cmake
构建的项目中。
产生该错误的实际命令行是(我仅复制相关部分)
/usr/bin/c++ ... -lpthread -ldl -Wl,-Bstatic -lgtest -Wl,-Bdynamic ...
该错误表示-lpthread
应该在-lgtest
之后。
手动修复该错误之后,另一个错误提示我将-lpthread
移到-Wl,-Bdynamic
之后。
更改之后,可以与
/usr/bin/c++ ... -ldl -Wl,-Bstatic -lgtest -Wl,-Bdynamic -lpthread ...
但是我是在命令行手动完成的。
我应该如何修改我的cmake配置(在项目的CMakeLists.txt
中或其他位置)以获取正确的标志顺序或消除错误?
$ find . -type f -iname "*cmake*" -exec grep -B 4 -A 4 pthread {} \;
是我项目的根源。
./CMake/FindMyprojMKL.cmake
set(MKL_LIBS
# mkl_solver_lp64
mkl_intel_lp64
mkl_core
pthread
mkl_gnu_thread)
message(STATUS "MKL_LIBS= ${MKL_LIBS}")
ELSE(MKL_LIBRARY)
message(STATUS "Error: can not found MKL_LIBRARY")
我想这不是解决此问题的正确位置。