所謂的工具鏈,兩部分的含義:html
工具,即tool工具
工具,是用來幹活的spa
此處要乾的活,目標是爲了:生成(能夠運行的)程序或庫文件htm
而爲了達成此目標,內部的執行過程和邏輯主要包含了:對象
編譯的輸入(對象)是:程序代碼教程
編譯輸出(目標)是:目標文件ip
編譯所須要的工具是:編譯器get
編譯器,常見的編譯器,即爲gcc編譯器
連接的輸入(對象)是:(程序運行時所依賴的,或者某個庫所依賴的另一個)庫(文件)it
連接的輸出(目標)是:程序的可執行文件,或者是能夠被別人調用的完整的庫文件
連接所須要的工具是:連接器
連接器,即ld
即,此處,爲了將程序代碼,編譯成可執行文件,涉及到編譯,連接(等其餘步驟),要依賴到不少相關的工具,最核心的是編譯器gcc,連接器ld。
而此處,所謂的工具,主要指的就是:和程序編譯連接等相關的gcc,ld等工具
![]() |
binutils包含了ld等工具 |
---|---|
實際上,上面所說的ld,只是處理操做目標文件,二進制文件的最主要的一個工具 而和操做目標等文件相關的,還有其餘不少工具的:as,objcopy,strip,ar等等工具的 因此,對此,GNU官網,弄出一個binutils,即binary utils,二進制工具(包),集成了這些,和操做二進制相關的工具集合,叫作binutils 因此,以後你所見到的,常見的工具,就是那個著名的GNU Binutils了。 更加詳細的解釋,參見教程:GNU Binutils詳解 |
鏈,即鏈條,chain
之因此能稱爲鏈,你是說明不止一個東西,而後,按照對應的邏輯,串在一塊兒,鏈在一塊兒
而對應的,涉及到的:
指的是就是前面所說的那個工具,即:和程序編譯連接等相關的gcc,binutils等工具
指的就是,按照程序自己編譯連接的前後順序,即:
先編譯,後連接,再進行後期其餘的處理等等,好比用objcopy去操做相應的目標文件等等。
如此的,將:
和程序編譯連接等相關的gcc,binutils等工具
按照先編譯後連接等相關的編譯程序的內在邏輯
串起來,就成了咱們所說的:工具鏈