cmake-> libpthread.so.0:添加符号时出错:命令行缺少DSO

时间:2019-11-28 22:24:35

标签: cmake linker pthreads

我遇到了错误

/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")

我想这不是解决此问题的正确位置。

0 个答案:

没有答案