web-dev-qa-db-ja.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でこれを実行していることに注意してください。

7
A. Lopez

CLionでフラグ-pthreadを使用してコンパイルするには、CMakeLists.txtに次の行を追加する必要があります(私はテストし、機能しました)。

SET(CMAKE_CXX_FLAGS -pthread)
16
Le Danh

CMakeで、まずパッケージを見つけます。

find_package(Threads REQUIRED)

次に、それに対してリンクします。

target_link_libraries(${PROJECT_NAME} Threads::Threads)

これで、ビルドはリンク手順に成功します。

0
BullyWiiPlaza

フラグ-lpthreadまたは-pthreadを使用してコンパイルする必要があります(通常、pthreadを使用することをお勧めします)。 CLionを使用している場合は、CMakeLists.txtを編集して、次のようなコマンドでコンパイラフラグを設定し、コードがこのフラグでコンパイルされるようにする必要があります。

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

これらのオプションの詳細については、 この投稿 を参照してください。

0
Jon Deaton

CMakeLists.txtの最後でpthreadにリンクしていることを確認してください

target_link_libraries(${PROJECT_NAME} pthread)
0
Nate M