【问题标题】:undefined reference to `pthread_create' CLion未定义对“pthread_create”CLion 的引用
【发布时间】:2018-12-15 17:46:22
【问题描述】:

我正在尝试在 Linux (Ubuntu) 操作系统下使用 CLion 编译我的程序。

我的 CMake 文件:

# cmake_minimum_required(VERSION 3.5)
  project(untitled2 C)

  set(CMAKE_C_STANDARD 99)
  set(CMAKE_CXX_FLAGS -pthread)
  add_executable(untitled2 main.c)

我的程序使用线程,所以 我已经添加了 set(CMAKE_CXX_FLAGS -pthread),这是编译我的程序所必需的。 我收到一个编译错误:“未定义对 pthread_create 的引用”

我可以使用以下命令通过终端编译程序:

gcc main.c -o main -pthread

我认为我的问题在于 CMake 文件。 有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

  • 您还需要将-pthread 传递给链接器(或使用-lpthread 显式链接)。您可能还想了解the CMake FindThreads funciton(虽然目前处于离线状态,但根据他们的页面很快就会回来)。
  • 哦,顺便说一句,CXX 任何东西都适用于 C++,而不是 C。
  • 感谢您的回复。我把CXX改成C,编译成功!
  • 如何设置要使用的 C 标准(即使它是由 CLion 自动添加的)? CMakeLists.txt 中有一个关于语言和相关变量的非常简单的模式。
  • cmake and libpthread的可能重复

标签: linux cmake clion


【解决方案1】:

您必须将set(CMAKE_CXX_FLAGS -pthread) 更改为set(CMAKE_C_FLAGS -pthread),因为CXX 保留为C++。希望这会帮助你。

【讨论】:

    【解决方案2】:

    我可能仍然不是最好的选择,但请致电
    find_package(Threads REQUIRED)
    结合
    target_link_libraries(mytarget PRIVATE Threads::Threads)
    是实现目标的更现代方式,因为您应该对目标执行操作(而不是使用可能影响项目其他部分甚至包含拼写问题的“魔法”变量)。

    见:https://codingnest.com/basic-cmake-part-2/

    【讨论】:

      【解决方案3】:

      将此添加到 CMakeLists 对我来说很好:

      set(THREADS_PREFER_PTHREAD_FLAG ON)
      find_package(Threads REQUIRED)
      target_link_libraries(myprog Threads::Threads )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-17
        • 2022-01-03
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多