对符号“pthread_create@@GLIBC_2.2.5”的未定义引用

Cha*_*our 17 c++ compiler-errors makefile ubuntu-15.04

我刚刚拉了一个 git 存储库,我和我的朋友正在其中开发一个应用程序。当我运行make我面临这个错误:

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

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

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

Moh*_*d f 22

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

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
Run Code Online (Sandbox Code Playgroud)

如果您不使用 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)
Run Code Online (Sandbox Code Playgroud)

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

  • 请参阅[此答案](/sf/answers/2091032401/),了解更完整的 cmake 方法。 (2认同)
  • 我将“-pthread”添加到“Makefile”中的“LDFLAGS”,例如“LDFLAGS = -lpq -lyaml -pthread”,并且“make”效果很好。 (2认同)
  • 谢谢。这对我有用。SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") (2认同)