什么是工具鏈


http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html

所謂的工具鏈,兩部分的含義:

  • 工具

    工具,即tool

    工具,是用來干活的

    此處要干的活,目標是為了:生成(可以運行的)程序或庫文件

    而為了達成此目標,內部的執行過程和邏輯主要包含了:

    1. 編譯

      編譯的輸入(對象)是:程序代碼

      編譯輸出(目標)是:目標文件

      編譯所需要的工具是:編譯器

      編譯器,常見的編譯器,即為gcc

       

    2. 鏈接

      鏈接的輸入(對象)是:(程序運行時所依賴的,或者某個庫所依賴的另外一個)庫(文件)

      鏈接的輸出(目標)是:程序的可執行文件,或者是可以被別人調用的完整的庫文件

      鏈接所需要的工具是:鏈接器

      鏈接器,即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等工具

按照先編譯后鏈接等相關的編譯程序的內在邏輯

串起來,就成了我們所說的:工具鏈


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM