2017-01-02 4 views
-1

私はDebian 8でgccを使ってマルチスレッドプログラミングを始めました。マルチスレッドテストアプリケーション(foobar.c)をうまく書いて実行しましたが、Makefileで混乱しています)。特に、動作するコマンドはgcc引数:-pthread。それは何をするためのものか?

gcc foobar.c -o foobar -pthread 

"-pthread"と混乱します。

(a)オプション "-p"に値 "thread"、または
(b)引数 "-pthread"ですか?

どちらの場合でも、実際に何をしていますか?いくつかの図書館を含む?いくつかのオブジェクトを含む?他のオプションを設定していますか?

BTW - 同様の質問15929739が尋ねられましたが、決して答えられませんでした。質問20924412も役に立ちませんでした。 man pageから

+0

関連するd:http://stackoverflow.com/q/23250863/694576 – alk

答えて

2

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

GCC 6.2.1のように、具体的には、-pthreadます:

  • #define _REENTRANT 1
  • libpthread

私はこれを知っていますかどのように、あなたが尋ねるに対してリンクする-lpthreadを追加?

どのプリプロセッサフ​​ラグが追加されますか?

レッツ・dump the preprocessor definesとそれらを比較:

$ diff <(gcc -dM -E - < /dev/null) <(gcc -pthread -dM -E - < /dev/null) 
> #define _REENTRANT 1 

リンカオプションが追加されますか?

レッツ・dump the ld options passed by GCCとそれらを比較:

diff <(gcc -### -o foo empty.c 2>&1) <(gcc -### -pthread -o foo empty.c 2>&1) 

ここでの出力は、もう少し冗長ですが、私たちは、一時的なファイル名の違いを無視した場合、我々は見つける:

  • -lpthread
  • "-plugin-opt=-pass-through=-lpthread"
+0

はい、わかりましたが、まだ不明です。プリプロセッサには何が定義されていますか?リンクされているものは何ですか?このようなダミーであることを申し訳ありません。 – DontPanic

+0

私の編集内容があなたの質問に答えてくれることを願っています。 –

関連する問題