web-dev-qa-db-ja.com

コンパイル時の-pthreadフラグの重要性

さまざまなマルチスレッドCおよびC++プロジェクトで、コンパイルステージとリンクステージの両方に-pthreadフラグが適用され、他の人はそれをまったく使用せず、リンクステージに-lpthreadだけを渡します。

-pthreadフラグを使用してコンパイルおよびリンクしない危険性はありますか?つまり、-pthreadは実際に何をしますか?私は主にLinuxプラットフォームに興味があります。

135
leeeroy

試してください:

gcc -dumpspecs | grep pthread

%{pthread:で始まるものを探します。

私のコンピューターでは、これによりファイルが-D_REENTRANTでコンパイルされ、-lpthreadでリンクされます。他のプラットフォームでは、これが異なる場合があります。ほとんどの移植性のために-pthreadを使用します。

GNU libcで_REENTRANTを使用すると、一部のlibcヘッダーの動作が変更されます。具体的な例として、errnoがスレッドローカルな場所を返す関数を呼び出すようにします。

102

man gccから:

-pthread pthreadsライブラリでマルチスレッドのサポートを追加します。このオプションは、プリプロセッサとリンカの両方にフラグを設定します。

37
Dmitry