以下は私の最初のマルチスレッドプログラムです。ただし、コンパイル中にリンクエラーが発生します。エラーメッセージの一部:
std::thread::thread<void (&)(int), int&>(void (&)(int), int&):
test.cpp (.text._ZNSt6threadC2IRFviEJRiEEEOT_DpOT0_[_ZNSt6threadC5IRFviEJRiEEEOT_DpOT0_]+0x33): undefined reference pthread_create
collect2: error ld return 1
#include<thread>
void f(int i) {}
int main() {
std::thread t(f, 1);
t.join();
return 0;
}
コンパイルオプションとして-pthread
を使用してコンパイルする必要があります。
私はあなたのコードをこれでコンパイルさせました(すべての警告通知を与えるために-Wall
関数を追加しましたが):
g++ -pthread -out foo.exe foo.cpp
(foo.cpp
は、コードを含む、使用した入力ファイル名です)
プログラムがc ++ 11のスレッド機能を使用している場合でも、プログラムを正常にコンパイルするには、 '-pthread'を指定する必要があります。
詳細は以下のスレッドを読んでください https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763369
私は同じ問題(Pthread_createへの未定義の参照)を修正しました。そのため、問題はあなたのコードではなく、G ++コンパイラでオブジェクトファイルを生成する際に見逃された引数です
void threadFun()
{
cout<<"\n"<<" "<<"INSIDE THREAD"<<"\n";
}
int main()
{
thread t1(threadFun);
t1.join();
return 0;
}
ここに問題があります:
これは私がそれを修正した方法です: