當我編譯cc filename.c時,我編寫了一個小線程程序,在編譯期間我得到了一些語句,但是當我使用-lpthread(cc filename.c -lpthread)編譯時,它被執行了什麼? -lpthread爲什麼需要它?任何人都可以詳細解釋這一點。這將有很大的幫助。編譯一個線程程序
編譯一個線程程序
回答
您在程序中使用的pthread_create()
函數不是基本的C函數,並且需要使用庫。
這就是爲什麼你必須使用這個命令開關-lpthread
。 這個gcc命令告訴他在磁盤上的某個地方尋找一個名爲libpthread
的庫,並使用它來提供線程創建機制。
我建議你閱讀這熟悉的「庫」的概念:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
pthread是一種叫做POSIX線程的東西。它是Unix類似POSIX環境中的線程的標準庫。
既然您要使用pthread,您需要告訴編譯器鏈接到該庫。
您可以瞭解更多關於什麼是lpthread以及它是如何工作的:https://computing.llnl.gov/tutorials/pthreads/
實際上沒有任何「lpthread」。 'libpthread'將是被鏈接的物理庫的名稱; '-lpthread'是'-l pthread'的縮寫,當查找實現它的實際文件時,鏈接自動將'lib'放在每個庫的前面。 – 2011-04-27 12:13:08
編輯我的答案,謝謝 – rzetterberg 2011-04-27 12:17:39
-l選項通常用於指定庫(在這種情況下,並行線程庫),應與你的程序鏈接。
由於線程函數通常位於單獨的庫中,因此在構建使用它們的程序時需要使用類似這樣的選項,否則將會出現鏈接器錯誤。
- 1. 錯誤編譯線程程序
- 2. 如何編譯線程程序?
- 3. 用g ++編譯一個Windows C++程序
- 4. 編譯和運行一個Qt程序
- 5. 編譯一個AST到程序集
- 6. 使用gcc在另一個程序中編譯程序
- 7. 使用另一個java程序編譯java程序
- 8. 編譯並執行一個jar程序包的java程序
- 9. boost ::線程編譯錯誤
- 10. C++程序編譯
- 11. 編譯C++程序
- 12. 編譯vmci程序
- 13. 編譯boost程序
- 14. 編譯trilinos程序
- 15. 彙編:編譯COM程序
- 16. 編程一個簡單的編譯器
- 17. 編譯Fortran程序和編譯器/庫
- 18. 製作一個C程序來編譯另一個
- 19. 使用線程在程序中編譯錯誤
- 20. 編譯沒有多線程DLL的程序(Visual C++ 2010)
- 21. 一個線程在iPhone應用程序中殺死另一個線程(兩個線程都是主線程)?
- 22. 無法在一個程序中編譯兩個文件的程序
- 23. 編寫一個多線程C#應用程序
- 24. 用C和程序集編寫一個簡單的線程
- 25. 對一個基本的多線程程序進行編碼
- 26. 如何讓這個C程序編譯?
- 27. 爲什麼這個C++程序編譯?
- 28. Makefile可以編譯多個C程序?
- 29. 守護程序線程不止一個?
- 30. 定時一個Fortran多線程程序
爲我們詳細講解,您需要提供詳細信息 - 如源代碼和輸出。在這種情況下,我們可以沒有辦法,但是如果你沒有告訴我們任何有用的東西,我們通常不能提供幫助。 – delnan 2011-04-27 11:50:51