对‘pthread_create’未定义的引用

问题:

使用CLion,在Linux下编写C++多线程程序(使用future和async()),CMake构建项目失败,错误提示为"对‘pthread_create’未定义的引用"。

源码:

#include <iostream>
#include <future>

void th1(){
    std::cout<<"th1"<<std::endl;
}

void th2(){
    std::cout<<"th2"<<std::endl;
}

int main() {
    using namespace std;

    future<void> f1(async(th1));
    future<void> f2(async(th2));

    f1.get();
    f2.get();

    return 0;
}

错误提示:

在函数‘std::thread::thread<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (*)()> >, void>::_Async_state_impl(std::thread::_Invoker<std::tuple<void (*)()> >&&)::{lambda()#1}>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (*)()> >, void>::_Async_state_impl(std::thread::_Invoker<std::tuple<void (*)()> >&&)::{lambda()#1}&&)’中:
/usr/include/c++/7/thread:122:对‘pthread_create’未定义的引用

原因:

由于pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程时,在编译中要加 -lpthread参数。摘自--https://www.cnblogs.com/liuwanpeng/articles/6654702.html

解决:

在编译中要加 -lpthread参数

  • gcc xxx.c -o yyy -lpthread
  • CLion的CMakeLists文件:link_libraries(pthread)
原文地址:https://www.cnblogs.com/icky1024/p/debug-pthread-compile.html