C語言編譯過程

2021-08-22 11:38:55 字數 728 閱讀 3298

c語言通過編譯器【gcc】生成可執行檔案,這其中是直接就生成了可執行檔案嗎?

gcc test.c -o test

其實並不是,c語言的編譯存在四個步驟。

test.c-------(1)------->test.i--------(2)------>test.s------(3)------>test.o------(4)------>test

(1)是預處理過程。

預處理用於將所有的#include標頭檔案以及巨集定義替換成其真正的內容,

gcc -e -i./inc test.c -o test.i

或者直接呼叫cpp命令

$ cpp test.c -i./inc -o test.i

上述命令中-e是讓編譯器在預處理之後就退出,不進行後續編譯過程;-i指定頭檔案目錄,這裡指定的是我們自定義的頭檔案目錄;-o指定輸出檔名。

(2)是編譯過程。

這裡的編譯不是指程式從原始檔到二進位制程式的全部過程,而是指將經過預處理之後的程式轉換成特定彙編**(assembly code)的過程。

(3)是彙編過程。

$ as test.s -o test.o

等價於:

gcc -c test.s -o test.o

這一步會為每乙個原始檔產生乙個目標檔案。因此mymath.c也需要產生乙個mymath.o檔案。

(4)是鏈結過程。

鏈結過程是將多個目標檔案【.o檔案】以及所需要的外部庫。

C語言編譯過程

編譯,編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預處理讀...

C語言編譯過程

編譯,編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預處理 ...

C語言編譯過程

章 c語言編譯過程 2008年09月02日 星期二 上午 09 53 編譯,編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源程式標頭檔案 預編譯處理 cpp 編譯程...