C中的編譯器和鏈接器有什麼區別?編譯器和鏈接器之間有什麼區別?
31
A
回答
57
編譯器將用人類可讀的編程語言編寫的代碼轉換爲您的處理器可以理解的機器代碼表示。此步驟會創建對象文件。
一旦這個步驟由編譯器完成,需要另一個步驟來創建一個可執行的可執行文件,該文件可以被調用並運行,即將編譯後的代碼需要調用的函數調用(例如)工作。例如,您的代碼可以調用sprintf
,這是C標準庫中的一個例程。你的代碼沒有任何提供sprintf
提供的實際服務,它只是報告它必須被調用,但實際代碼駐留在公共C庫中的某處。要執行此(和許多其他)鏈接,必須調用鏈接器。鏈接後,您將獲得可運行的實際可執行文件。
19
編譯器從源代碼生成目標代碼文件(機器語言)。
A linker將這些目標代碼文件組合成可執行文件。
許多IDE都會連續調用它們,所以您絕對不會看到鏈接器在工作。有些語言/編譯器沒有獨特的鏈接器,鏈接由編譯器完成,作爲其工作的一部分。
相關問題
- 1. 不同的編譯器之間有什麼區別
- 2. 動態鏈接器和動態加載器有什麼區別?
- 3. 點對點鏈接和單播之間有什麼區別?
- 4. 未編譯和編譯的ASP.NET頁面之間有什麼區別
- 5. 調試和編譯有什麼區別?
- 6. 鏈輪 - 導軌和鏈輪寶石之間有什麼區別?
- 7. 運行時錯誤和編譯器錯誤有什麼區別?
- 8. 宏和編譯器插件有什麼區別?
- 9. Microchip XC8和C18編譯器有什麼區別?
- 10. 微軟C/C++編譯器的C編譯器和C++編譯器有什麼區別?
- 11. GCC和LD鏈接有什麼區別?
- 12. 鏈接和綁定有什麼區別?
- 13. 鏈接器和生成文件有什麼區別?
- 14. dpm()和dsm()之間有什麼區別?
- 15. @dynamic和@synthesize之間有什麼區別?
- 16. vbNullString和「」之間有什麼區別嗎?
- 17. * zoom和zoom之間有什麼區別?
- 18. String.Concat,string.format和+之間有什麼區別?
- 19. StaticLayout和DynamicLayout之間有什麼區別
- 20. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之間有什麼區別?
- 21. :: after和after之間有什麼區別?
- 22. %.02f和%.2f之間有什麼區別?
- 23. {$ var}和$ var之間有什麼區別?
- 24. ReleaseFloatArrayElements和DeleteLocalRef之間有什麼區別
- 25. {0}和「」之間有什麼區別?
- 26. getA()和this.getA()之間有什麼區別?
- 27. @observable和@published之間有什麼區別
- 28. $ {}和#{}之間有什麼區別?
- 29. url.getFile()和getpath()之間有什麼區別?
- 30. KVC和Properties之間有什麼區別?
+1很好的解釋。請注意,在大多數操作系統中,實際上有兩個*鏈接器:編譯後生成可執行文件(通常稱爲「鏈接器」)的鏈接器,以及鏈接到動態加載庫(也稱爲.so或。 DLL)在執行時(通常稱爲「動態鏈接器」)。 – sleske 2010-09-30 14:14:07