問題:
使用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)