GCC編譯和鏈接過程

GCCGNU Compiler CollectionGNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟件,也是 GNU計劃的關鍵部分。GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如LinuxBSDMac OS X等)採納為標準的編譯器,GCC同樣適用於微軟的Windows

 

一、源代碼

 

 

二、編譯過程

 

1)預處理:

 

 預處理就是將要包含(include)的文件插入原文件中、將宏定義展開、根據條件編譯命令選擇要使用的代碼,最後將這些代碼輸出到一個“.i”文件中等待進一步處理。

結果:見文件0617_Demo.i

 

 2)編譯

 

 

 編譯就是把C/C++代碼(比如上面的“.i”文件)“翻譯”成彙編代碼。

結果:見文件0617_Demo.s

 

 3)彙編

 

 

 紅色箭頭處的relocatable表示可重定位,也即是可以和庫等依賴文件鏈接。

彙編就是將第二步輸出的彙編代碼翻譯成符合一定格式的機器代碼,在Linux系統上一般表現位ELF目標文件(OBJ文件)

結果:見文件0617_Demo.o

 

 這個就是沒有連接的目標代碼,也是01序列,需要使用二進制查看器如Hex Editor Neo等查看。

 

4)鏈接

 

 鏈接就是將彙編生成的OBJ文件、系統庫的OBJ文件、庫文件鏈接起來,最終生成可以在特定平台運行的可執行程序。如圖中紅色箭頭所示。

結果:見文件0617_Demo

 

 總結:在編譯過程中。除非使用了“-c”,“-S,“-E”選項(或者編譯錯誤阻止了完整的過程),否則統一完整鏈接步驟。

 

三、鏈接原理

gcc -c -o 0617_Demo.o 0617_Demo.c 不作最後一步鏈接,得到0617_Demo.o二進制OBJ文件

gcc -v -o 0617_Demo 0617_Demo.o 先看一下鏈接過程是怎樣的:

 

  

l  crt1.ocrti.ocrtbegin.ocrtend.ocrtn.ogcc加入的系統標準啟動文件,對於一般應用程序,這些啟動是必需的。

l  -lc:鏈接libc庫文件,其中libc庫文件中就實現了printf等函數。

 

 

 

 

 

GCC編譯和鏈接過程

 

GCCGNU Compiler CollectionGNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟件,也是 GNU計劃的關鍵部分。GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如LinuxBSDMac OS X等)採納為標準的編譯器,GCC同樣適用於微軟的Windows

 

一、源代碼

 

二、編譯過程

1)預處理:

預處理就是將要包含(include)的文件插入原文件中、將宏定義展開、根據條件編譯命令選擇要使用的代碼,最後將這些代碼輸出到一個“.i”文件中等待進一步處理。

結果:見文件0617_Demo.i

 

2)編譯

編譯就是把C/C++代碼(比如上面的“.i”文件)“翻譯”成彙編代碼。

結果:見文件0617_Demo.s

 

3)彙編

紅色箭頭處的relocatable表示可重定位,也即是可以和庫等依賴文件鏈接。

彙編就是將第二步輸出的彙編代碼翻譯成符合一定格式的機器代碼,在Linux系統上一般表現位ELF目標文件(OBJ文件)

結果:見文件0617_Demo.o

這個就是沒有連接的目標代碼,也是01序列,需要使用二進制查看器如Hex Editor Neo等查看。

 

4)鏈接

鏈接就是將彙編生成的OBJ文件、系統庫的OBJ文件、庫文件鏈接起來,最終生成可以在特定平台運行的可執行程序。如圖中紅色箭頭所示。

結果:見文件0617_Demo

 

總結:在編譯過程中。除非使用了“-c”,“-S,“-E”選項(或者編譯錯誤阻止了完整的過程),否則統一完整鏈接步驟。

 

三、鏈接原理

gcc -c -o 0617_Demo.o 0617_Demo.c 不作最後一步鏈接,得到0617_Demo.o二進制OBJ文件

gcc -v -o 0617_Demo 0617_Demo.o 先看一下鏈接過程是怎樣的:

 

l  crt1.ocrti.ocrtbegin.ocrtend.ocrtn.ogcc加入的系統標準啟動文件,對於一般應用程序,這些啟動是必需的。

l  -lc:鏈接libc庫文件,其中libc庫文件中就實現了printf等函數。

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!