對‘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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM