1、預處理
處理原始檔中以「#」開頭的語句。如標頭檔案、巨集定義等語句進行處理,.c檔案生成.i檔案。
1)巨集定義的目的為了提高**的可讀性,此時對巨集定義進行原樣替換。
2)在標頭檔案中主要包含函式的宣告、結構體的宣告等。宣告的目的是為了告訴編譯器做語法檢查,防
止呼叫時出現錯誤。此時在預處理的作用是把頭檔案中的包含的內容到引用該標頭檔案的原始檔中,並沒有做
語法檢查。
gcc -e hello.c -o hello.i
-e:只進行預處理,預處理結束後停止編譯過程。
-o:將結果輸出到目標檔案
2、編譯
編譯主要是編譯器的工作,檢查**的語法結構,是否有語法錯誤,生成.s的彙編檔案。
gcc -s hello.i -o hello.s
-s:生成.s的彙編檔案,編譯結束後停止編譯流程。
3、彙編
將彙編**生成計算機系統可以識別的機器碼,即二進位制檔案,即.o檔案。此時的.o檔案是乙個普通的二進位製文
件,只不過缺少程式執行時需要的某些庫,所以無法執行。
gcc -c hello.s -o hello.o
-c:生成二進位制檔案,彙編工作完成後停止編譯。
4、鏈結
將二進位制檔案與所依賴的庫檔案進行鏈結,生成乙個可執行檔案。可以通過「-l」選項來進行鏈結。
一般c程式在呼叫標準庫時會進行預設鏈結,不需要開發者手動鏈結。但是並不是系統預設為我們
庫gcc hello.c -o hello -lm (math : 數學)
gcc編譯流程
可以利用gcc的引數來控制執行的過程,這樣就可以更深入的了解編譯c程式的過程。下面將通過對乙個程式的編譯來演示整個過程。includeint main 1 預處理 編譯器將c程式的標頭檔案編譯進來,還有巨集的替換,可以用gcc的引數 e來參看。命令 gcc e hello.c o hello.i 作...
gcc編譯流程
步驟命令 說明預處理 gcc e hello.c o hello.i 1.將所有 define刪除,並且展開所有的巨集定義 2.處理所有的條件預編譯指令,如 if ifdef undef ifndef endif elif 3.處理 include,將包含的檔案插入到此處,這是乙個遞迴的過程 4.刪...
GCC編譯流程
gcc使用的基本語法為 gcc option filename 這裡option是gcc使用時的一些選項,可以通過指定不同的選項實現不同的功能。這裡的filename是gcc要編譯的檔案,gcc會根據使用者指定的編譯選項以及所識別的檔案字尾名來對編譯檔案進行響應的處理。1,預處理階段 預處理功能分為...