鏈接器是操作系統還是編譯器/ IDE的一部分?我想知道我們使用的ide是否包含鏈接器
回答
它是編譯器/ IDE的一部分。或者更確切地說,編譯器和鏈接器是單獨的程序(在構建可執行文件的不同階段調用),但是通常整個(包括幾個其他可執行文件)束被稱爲編譯器,例如, GCC。
鏈接器不是操作系統的一部分,儘管某些操作系統(如Linux)可能會與一個(或甚至多個)鏈接器捆綁在一起作爲某些編譯器工具鏈的一部分。無論如何,您可以在同一個操作系統上安裝和使用多個不同的編譯器(每個編譯器都包含自己的鏈接器)。例如。在Windows操作系統上,您可以同時安裝gcc和msvc,但gcc不能與Visual Studio IDE一起使用,因爲它僅與msvc捆綁在一起。但是AFAIK Eclipse也可以使用。
更新:你似乎由linker in the compiler toolchain和OS的dynamic linker之間的相似名稱混淆。
編譯器工具鏈的鏈接器在構建過程中執行其工作,當它需要將不同的編譯單元拼接在一起以形成一致的可執行程序時。通常,代碼包含對外部庫的調用;這些庫可以是靜態或動態。靜態庫基本上是可執行方法的存儲區,鏈接器可以將其物理複製到可執行文件中。動態庫包含不需要複製的方法;相反,鏈接器將一種對庫方法的引用存儲到可執行文件中。運行可執行文件時,動態庫在OS的幫助下加載,然後調用庫方法。這是由一部分操作系統完成的,而不幸的是,它被稱爲動態鏈接程序 - 但是這與編譯器工具鏈中的鏈接程序完全不同,應該稱爲裝載程序。
動態庫可以是共享存儲器,即相同的庫代碼可被多個可執行並行地使用(因此它們也被稱爲共享庫)。而從靜態庫複製的代碼跨所有可執行文件複製。
@Xaero,鏈接器不是操作系統的一部分,儘管某些操作系統(如Linux)可能會捆綁一個(甚至多個)鏈接器作爲某些編譯器工具鏈的一部分。 – 2010-09-06 21:08:37
@Xaero,你是對的,它有(這個詞對我來說也是新的:-) - 看我的更新。 – 2010-09-06 21:25:06
鏈接器是編譯器工具鏈(預處理器 - >編譯器 - >彙編器 - >鏈接器)的一部分。
它通常是編譯器的一部分。技術上的編譯器和鏈接器是不同的工具,但它們通常會聚到一起。
- 1. 我想知道cv錯誤的含義
- 2. 我想知道是否有可能使用Node.js的
- 3. 我想知道Z3是否支持輸入文件包含另一個文件
- 4. 我想知道,我們如何能夠利用新的
- 5. 我們如何知道是否使用任何視圖
- 6. 我想知道MKMapView?
- 7. 我們如何知道我們是僅使用WSS還是使用MOSS?
- 8. 我們如何知道類/接口是否有委託? --iOS
- 9. 我如何知道變量是否是emty或不在硒IDE
- 10. 我們如何知道我們的應用程序是否從iphone卸載?
- 11. 如何知道服務器是否在線,如果我們只知道IP?
- 12. 我如何知道我的字符串是否包含「micro」Unicode字符?
- 13. 我怎麼知道我的Perl模塊是否包含在-M下?
- 14. 我可以安全地使用#ifdef來知道是否包含C++ std標頭?
- 15. 我想知道是否有人知道加速計上的3軸是什麼?
- 16. 我怎麼知道錨鏈接是否被點擊?
- 17. 想知道我是否爲facebook javascript sdk編寫了頻道url。
- 18. 使用Pure css後我們是否需要包含normalize?
- 19. 我想知道如何在表中插入值時,我們不知道,我們正在進入的領域
- 20. 我們如何知道odoo Server的活動鏈接數量?
- 21. 我如何知道我的html鏈接是否從Servlet中被點擊?
- 22. 我們如何知道TURN或STUN服務器是否已連接?
- 23. 我想知道我們如何發送和接收Android手機上的文件?
- 24. 我如何知道服務器的連接是否正確?
- 25. 我怎樣才能知道是否是媒體鏈接安裝在我的Windows服務使用WiX的
- 26. 我們什麼時候知道我們應該使用符號?
- 27. 當我知道我的模塊是否被prestashop插件接受?
- 28. 我想知道我的形式提交
- 29. 我想知道Maven是什麼
- 30. 你好!我想知道我們如何將GUI應用程序(Tkinter)轉換爲鏈接。
你在使用什麼類型的IDE?原因是,由於OS不包含鏈接器,它並不意味着IDE將包含它。 – doc 2010-09-06 21:07:08