さまざまなマルチスレッド C および C++ プロジェクトで、フラグがコンパイル段階とリンク段階の両方に適用されているのを見たことがあります-pthread
が、フラグをまったく使用せずに-lpthread
リンク段階に渡すだけのプロジェクトもあります。
フラグを付けずにコンパイルおよびリンクすると危険はありますか?-pthread
つまり、 は実際には何を-pthread
するのでしょうか? 私は主に Linux プラットフォームに興味があります。
ベストアンサー1
試す:
gcc -dumpspecs | grep pthread
で始まるものを探します%{pthread:
。
私のコンピュータでは、これにより、ファイルは でコンパイルされ-D_REENTRANT
、 でリンクされます-lpthread
。他のプラットフォームでは、これは異なる場合があります。-pthread
移植性を最大限に高めるには、 を使用します。
GNU libc で を使用すると_REENTRANT
、一部の libc ヘッダーの動作が変わります。具体的な例としては、 がerrno
スレッドローカルの場所を返す関数を呼び出すようになります。