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)
CMake
で、まずパッケージを見つけます。
find_package(Threads REQUIRED)
次に、それに対してリンクします。
target_link_libraries(${PROJECT_NAME} Threads::Threads)
これで、ビルドはリンク手順に成功します。
フラグ-lpthread
または-pthread
を使用してコンパイルする必要があります(通常、pthread
を使用することをお勧めします)。 CLionを使用している場合は、CMakeLists.txtを編集して、次のようなコマンドでコンパイラフラグを設定し、コードがこのフラグでコンパイルされるようにする必要があります。
SET( CMAKE_CXX_FLAGS "<other compiler flags> -pthread")
これらのオプションの詳細については、 この投稿 を参照してください。
CMakeLists.txtの最後でpthreadにリンクしていることを確認してください
target_link_libraries(${PROJECT_NAME} pthread)