23

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

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

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

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

4

2 回答 2

33

我一直在研究多平台游戏引擎,但我只在 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 作为编译器标志传递

于 2020-04-26T10:50:36.347 回答
0

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

于 2018-03-17T09:19:14.660 回答