【问题标题】:Undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'对符号“pthread_create@@GLIBC_2.2.5”的未定义引用
【发布时间】:2016-03-12 15:04:19
【问题描述】:

我刚刚提取了一个 git 存储库,我和我的朋友正在其中开发一个应用程序。当我运行 ma​​ke 时,我遇到了这个错误:

对符号“pthread_create@@GLIBC_2.2.5”的未定义引用 /lib/x86_64-linux-gnu/libpthread.so.0:添加符号时出错:DSO 命令行collect2中缺少:错误:ld返回1退出状态 Makefile:182: 目标 'bin/release/ns' 的配方失败 make[1]: * [bin/release/ns] 错误 1 ​​Makefile:133: 目标“发布”的配方 制作失败:* [发布] 错误 2

我的朋友拉了同一个分支,他运行它没有任何问题。

您能给我一些关于修复的提示吗?详细解答将不胜感激。

【问题讨论】:

标签: c++ compiler-errors makefile ubuntu-15.04


【解决方案1】:

我一直在开发多平台游戏引擎,但我只在 Linux 上遇到了同样的问题。如果您使用的是 cmake,请将以下内容添加到您的 cmake 文件中:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")

如果您不使用 cmake,则需要手动为您的编译器添加此标志。

在linux系统中使用线程的完整cmake必须包含以下命令:

      set(CMAKE_THREAD_LIBS_INIT "-lpthread")
      SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
      set(CMAKE_HAVE_THREADS_LIBRARY 1)
      set(CMAKE_USE_WIN32_THREADS_INIT 0)
      set(CMAKE_USE_PTHREADS_INIT 1)
      set(THREADS_PREFER_PTHREAD_FLAG ON)

注意:此修复也适用于 Mac-O,但有一个区别。您不需要将 -pthread 作为编译器标志传递

【讨论】:

  • 查看this answer 了解更完整的 cmake 方法。
  • 我在Makefile 中添加了-pthreadLDFLAGS,比如LDFLAGS = -lpq -lyaml -pthreadmake 效果很好。
【解决方案2】:

您应该将“-lpthread”添加到您的库中。当然,您还应该将 libpthread 的目录添加到您的库目录中。

【讨论】:

  • 您应该使用 -pthread 进行编译和链接。 推荐使用-lpthread!来自手册:-pthread:与 POSIX 线程库链接。 GNU/Linux 目标、大多数其他 Unix 衍生产品以及 x86 Cygwin 和 MinGW 目标都支持此选项。在某些目标上,此选项还为预处理器设置标志,因此它应该始终用于编译和链接。
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2013-04-21
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多