さまざまなマルチスレッドCおよびC++プロジェクトで、コンパイルステージとリンクステージの両方に-pthread
フラグが適用され、他の人はそれをまったく使用せず、リンクステージに-lpthread
だけを渡します。
-pthread
フラグを使用してコンパイルおよびリンクしない危険性はありますか?つまり、-pthread
は実際に何をしますか?私は主にLinuxプラットフォームに興味があります。
試してください:
gcc -dumpspecs | grep pthread
%{pthread:
で始まるものを探します。
私のコンピューターでは、これによりファイルが-D_REENTRANT
でコンパイルされ、-lpthread
でリンクされます。他のプラットフォームでは、これが異なる場合があります。ほとんどの移植性のために-pthread
を使用します。
GNU libcで_REENTRANT
を使用すると、一部のlibcヘッダーの動作が変更されます。具体的な例として、errno
がスレッドローカルな場所を返す関数を呼び出すようにします。
man gcc
から:
-pthread pthreadsライブラリでマルチスレッドのサポートを追加します。このオプションは、プリプロセッサとリンカの両方にフラグを設定します。