gcc 編譯過程

2021-06-27 10:21:35 字數 1041 閱讀 3843

gcc 編譯分為四個過程舉例hello.c 的編譯過程

#include

int main()

(1)預處理gcc -e hello.c -o hello.i

省略了部分內容,包括

stdio.h

中的一些宣告及定義

預編譯過程主要處理那些源**中以#開始的預編譯指令,主要處理規則如下: l

將所有的#define刪除,並且展開所有的巨集定義; l

處理所有條件編譯指令,如#if,#ifdef等; l

處理#include預編譯指令,將被包含的檔案插入到該預編譯指令的位置。該過程遞迴進行,及被包含的檔案可能還包含其他檔案。 l

刪除所有的注釋//和/**/; l

新增行號和檔案標識,如#2 「hello.c」 2,以便於編譯時編譯器產生除錯用的行號資訊及用於編譯時產生編譯錯誤或警告時能夠顯示行號資訊; l

保留所有的#pragma編譯器指令,因為編譯器須要使用它們;

2.編譯gcc -s hello.i  -o hello.s

編譯過程就是把預處理完的檔案進行一系列詞法分析,語法分析,語義分析及優化後生成相應的彙編**檔案。

(介紹乙個將可執行檔案轉換為彙編檔案的方法

arm-linux-objdump –d elf_file > dis_file或者

arm-linux-objdump –d –b binary –m arm bin_file > dis_file

)3.彙編gcc -c hello.s -o hello.o

彙編器是將彙編**轉變成機器可以執行的命令,每乙個彙編語句幾乎都對應一條機器指令。彙編相對於編譯過程比較簡單,根據彙編指令和機器指令的對照表一一翻譯即可。

4.鏈結gcc  hello.o -o hello

鏈結器ld將各個目標檔案組裝在一起,解決符號依賴,庫依賴關係,並生成可執行檔案。

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...