2010-09-06 34 views

回答

7

它是編譯器/ IDE的一部分。或者更確切地說,編譯器和鏈接器是單獨的程序(在構建可執行文件的不同階段調用),但是通常整個(包括幾個其他可執行文件)束被稱爲編譯器,例如, GCC。

鏈接器不是操作系統的一部分,儘管某些操作系統(如Linux)可能會與一個(或甚至多個)鏈接器捆綁在一起作爲某些編譯器工具鏈的一部分。無論如何,您可以在同一個操作系統上安裝和使用多個不同的編譯器(每個編譯器都包含自己的鏈接器)。例如。在Windows操作系統上,您可以同時安裝gccmsvc,但gcc不能與Visual Studio IDE一起使用,因爲它僅與msvc捆綁在一起。但是AFAIK Eclipse也可以使用。

更新:你似乎由linker in the compiler toolchain和OS的dynamic linker之間的相似名稱混淆。

編譯器工具鏈的鏈接器在構建過程中執行其工作,當它需要將不同的編譯單元拼接在一起以形成一致的可執行程序時。通常,代碼包含對外部庫的調用;這些庫可以是靜態動態。靜態庫基本上是可執行方法的存儲區,鏈接器可以將其物理複製到可執行文件中。動態庫包含不需要複製的方法;相反,鏈接器將一種對庫方法的引用存儲到可執行文件中。運行可執行文件時,動態庫在OS的幫助下加載,然後調用庫方法。這是由一部分操作系統完成的,而不幸的是,它被稱爲動態鏈接程序 - 但是這與編譯器工具鏈中的鏈接程序完全不同,應該稱爲裝載程序

動態庫可以是共享存儲器,即相同的庫代碼可被多個可執行並行地使用(因此它們也被稱爲共享庫)。而從靜態庫複製的代碼跨所有可執行文件複製。

+0

@Xaero,鏈接器不是操作系統的一部分,儘管某些操作系統(如Linux)可能會捆綁一個(甚至多個)鏈接器作爲某些編譯器工具鏈的一部分。 – 2010-09-06 21:08:37

+0

@Xaero,你是對的,它有(這個詞對我來說也是新的:-) - 看我的更新。 – 2010-09-06 21:25:06

1

鏈接器是編譯器工具鏈(預處理器 - >編譯器 - >彙編器 - >鏈接器)的一部分。

0

它通常是編譯器的一部分。技術上的編譯器和鏈接器是不同的工具,但它們通常會聚到一起。

+0

@Xaero:鏈接不需要OS支持。 'ld'是Linux特有的。在Widnows中,您將您的程序與編譯器套件鏈接起來。 – doc 2010-09-06 21:12:12

+1

Windows使用動態鏈接庫does not it? – Sadique 2010-09-06 21:15:13

+0

@Xaero:這只是Windows上共享庫的名稱。動態鏈接庫或「DLL」。在Linux上你有共享對象或'so'。您可以使用各種工具爲Windows生成dll。但是Windows沒有自己的連接器。 – doc 2010-09-06 21:19:57

相關問題