对pthread CLion的未定义引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对pthread CLion的未定义引用相关的知识,希望对你有一定的参考价值。

我正在尝试在CLion中运行这个简单的线程c ++程序

#include <iostream>
#include <thread>

using namespace std;


//Start of the thread t1
 void hello() {
     cout << "Hello,concurrent world!" << endl; }



 int main() {
     thread t1(hello);     // spawn new thread that calls hello()

     cout << "Concurrency has started!" << endl;
     t1.join();            

     cout << "Concurrency completed!";

     return 0;
   }

我的问题是有一个未定义的引用pthread的错误,我没有看出我做错了什么...请注意我在CLion上这样做。

答案

在CLion中,要使用标志-pthread进行编译,您应该将以下行添加到CMakeLists.txt(我已经测试并且它可以工作):

SET(CMAKE_CXX_FLAGS -pthread)
另一答案

确保在CMakeLists.txt的末尾链接到pthread

target_link_libraries(${PROJECT_NAME} pthread)
另一答案

你必须使用标志-lpthread-pthread(通常建议使用pthread)进行编译。如果您正在使用CLion,那么您将需要编辑CMakeLists.txt以确保使用此标志编译代码,方法是使用以下命令设置编译器标志:

SET( CMAKE_CXX_FLAGS  "<other compiler flags> -pthread")

您可以在this post上了解有关这些选项的更多信息。

以上是关于对pthread CLion的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

Linux 中对 pthread_create 的未定义引用

gcc 和 pthreads 的未定义引用错误 _dl_stack_flags

使用 ASIO 和 std::thread 制作 C++11 应用程序时对“pthread_create”的未定义引用错误

在Clion的IDE中指定命令行参数

对静态成员的未定义引用

glfw + 代码块 + 对 `__gxx_personality_sj0' 的未定义引用