web-dev-qa-db-ja.com

単純なC ++スレッドプログラムをコンパイルできない

以下は私の最初のマルチスレッドプログラムです。ただし、コンパイル中にリンクエラーが発生します。エラーメッセージの一部:

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;
}
3
Kafe Chang

コンパイルオプションとして-pthreadを使用してコンパイルする必要があります。

私はあなたのコードをこれでコンパイルさせました(すべての警告通知を与えるために-Wall関数を追加しましたが):

g++ -pthread -out foo.exe foo.cpp

foo.cppは、コードを含む、使用した入力ファイル名です)

5
Thomas Ward

プログラムがc ++ 11のスレッド機能を使用している場合でも、プログラムを正常にコンパイルするには、 '-pthread'を指定する必要があります。


詳細は以下のスレッドを読んでください https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763369

1
pasha

私は同じ問題(Pthread_createへの未定義の参照)を修正しました。そのため、問題はあなたのコードではなく、G ++コンパイラでオブジェクトファイルを生成する際に見逃された引数です

void threadFun()
{
    cout<<"\n"<<"   "<<"INSIDE THREAD"<<"\n";
}

int main()
{
    thread t1(threadFun);
    t1.join();

    return 0;
}

ここに問題があります:

これは私がそれを修正した方法です:

1
omesh sharma