gcc編譯過程總結

2021-09-05 10:33:42 字數 731 閱讀 9828

gcc 1.c -o 1    整合編譯程式,直接得到可執行檔案。

預處理:將原始檔中所有偽指令(#開頭的指令,標頭檔案和巨集),給替換成為真正可以執行的**。

gcc -e xx.c -o xx.i

編譯:將原始檔中所有的語法錯誤,**寫法規範,進行解析,同時將預處理生成的.i檔案中,多餘的函式定義去掉。生成彙編檔案(x86架構的複雜指令集合)。

gcc -s xx.i -o xx.s

(用nm指令查到對應的檔案所擁有的符號表)

彙編:將所有的彙編指令,生成作業系統可以識別的二進位制機器碼。elf檔案

gcc -c xx.s -o xx.o

注意點:

1.所生成的二進位製碼無法直接執行,因為函式真正執行體。

2.缺乏真正程式入口(程式執行位址,彙編的真正入口)

將上面三步合成一步進行編譯:gcc -c xx.c -o xx.o

鏈結:將所有的.o鏈結成為真正的可執行檔案。同時會將作業系統需要依賴的真正的入口程式,給加到.o檔案的前面。並且將所有需要使用到的函式原始碼給加入到可執行檔案當中。為這個可執行鏈結乙個執行位址。

gcc -c xx.o -o xx(帶作業系統,自動分配執行位址)

ld  xx.o -test=0x20000000 xx

用file指令,可以查到乙個可執行檔案的詳細格式。

gcc編譯過程

本文對gcc編譯器如何工作做乙個概要描述.更為詳細的資訊請參考編譯器手冊。當我們進行編譯的時候,要使用一系列的工具,我們稱之為工具鏈.其中包括 預處理器cpp,編譯器前端gcc g 彙編器as,聯結器ld.乙個編譯過程包括下面幾個階段 1 預處理。預處理器cpp將對原始檔中的巨集進行展開。2 編譯。...

gcc編譯過程

當我們進行編譯的時候,要使用一系列的工具,我們稱之為工具鏈.其中包括 預處理器cpp,編譯器前端gcc g 彙編器as,聯結器ld.乙個編譯過程包括下面幾個階段 1 預處理。預處理器cpp將對原始檔中的巨集進行展開。2 編譯。gcc將c檔案編譯成彙編檔案。3 彙編。as將彙編檔案編譯成機器碼。4 連...

GCC編譯過程

第一步 預處理後結束 引數 e gcc e hello.c o hello.i 檢視hello.i檔案中的內容 cat hello.i stdio.h的內容插入到檔案裡去了,巨集定義也在預處理中都做了相應的處理 第二步 將hello.i 編譯為 目標 引數 c gcc c hello.i o hel...