2017-01-02 303 views
-1

我開始在Debian 8下使用gcc進行多線程編程。我已經成功編寫並運行了一個多線程測試應用程序(foobar.c),但是我被Makefile弄糊塗了(從示例中複製)。特別是,作品的命令是gcc參數:-pthread。它有什麼作用?

gcc foobar.c -o foobar -pthread 

我很困惑「-pthread」。 (a)值爲「thread」的選項「-p」,或者
(b)參數「-pthread」?

如果兩種情況下,它究竟在幹什麼?包括一些圖書館?包括一些對象?設置其他選項?

順便說一句 - 一個類似的問題15929739被問,但從未回答。問題20924412也沒有幫助。

+0

相關d:http://stackoverflow.com/q/23250863/694576 – alk

回答

2

man page

-pthread
增加了對與pthreads庫支持多線程。此選項爲預處理器和鏈接器設置標誌。

具體而言,作爲GCC 6.2.1,-pthread將:

  • #define _REENTRANT 1
  • 添加-lpthread反對libpthread

我怎麼知道這一點,你問鏈接?

添加了哪些預處理器標誌?

讓我們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

希望我的編輯能夠回答你的問題。 –