2011-04-27 66 views
0

當我編譯cc filename.c時,我編寫了一個小線程程序,在編譯期間我得到了一些語句,但是當我使用-lpthread(cc filename.c -lpthread)編譯時,它被執行了什麼? -lpthread爲什麼需要它?任何人都可以詳細解釋這一點。這將有很大的幫助。編譯一個線程程序

+1

爲我們詳細講解,您需要提供詳細信息 - 如源代碼和輸出。在這種情況下,我們可以沒有辦法,但是如果你沒有告訴我們任何有用的東西,我們通常不能提供幫助。 – delnan 2011-04-27 11:50:51

回答

3

您在程序中使用的pthread_create()函數不是基本的C函數,並且需要使用庫。

這就是爲什麼你必須使用這個命令開關-lpthread。 這個gcc命令告訴他在磁盤上的某個地方尋找一個名爲libpthread的庫,並使用它來提供線程創建機制。

我建議你閱讀這熟悉的「庫」的概念:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

0

pthread是一種叫做POSIX線程的東西。它是Unix類似POSIX環境中的線程的標準庫。

既然您要使用pthread,您需要告訴編譯器鏈接到該庫。

您可以瞭解更多關於什麼是lpthread以及它是如何工作的:https://computing.llnl.gov/tutorials/pthreads/

+1

實際上沒有任何「lpthread」。 'libpthread'將是被鏈接的物理庫的名稱; '-lpthread'是'-l pthread'的縮寫,當查找實現它的實際文件時,鏈接自動將'lib'放在每個庫的前面。 – 2011-04-27 12:13:08

+0

編輯我的答案,謝謝 – rzetterberg 2011-04-27 12:17:39

0

-l選項通常用於指定庫(在這種情況下,並行線程庫),應與你的程序鏈接。

由於線程函數通常位於單獨的庫中,因此在構建使用它們的程序時需要使用類似這樣的選項,否則將會出現鏈接器錯誤。