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 編譯程...