可以利用gcc的引數來控制執行的過程,這樣就可以更深入的了解編譯c程式的過程。
下面將通過對乙個程式的編譯來演示整個過程。
#includeint main()
1:預處理:編譯器將c程式的標頭檔案編譯進來,還有巨集的替換,可以用gcc的引數-e來參看。
命令:gcc -e hello.c -o hello.i
作用:將hello.c預處理輸出hello.i
2:編譯:這個階段編譯器主要做詞法分析、語法分析、語義分析等,在檢查無錯誤後後,把**翻譯成組合語言。可用gcc的引數-s來參看。
編譯器(ccl)將文字檔案hello.i 翻譯成文字檔案hello.s, 它包含乙個組合語言程式。組合語言程式中的每條語句都以一種標準的文字格式描述了
一條低階機器語言指令。
命令:gcc -s hello.i -o hello.s
作用:將預處理輸出檔案hello.i彙編成hello.s檔案
3:彙編:把編譯階段生成的.s 檔案轉換為二進位制目標**。可用gcc的引數-c來參看。彙編器(as)將hello.s翻譯成機器語言指令,把這些指令打包成可重定位目標程式的格式, 並將結果儲存在目標檔案hello.o中。hello.o檔案是乙個二進位制檔案,它的位元組編碼是機器語言。
命令:gcc -c hello.s -o hello.o
作用:作用:將彙編輸出檔案hello.s編譯輸出hello.o檔案
命令:gcc hello.o -o hello
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,預處理階段 預處理功能分為...
gcc編譯流程
1 預處理 處理原始檔中以 開頭的語句。如標頭檔案 巨集定義等語句進行處理,c檔案生成.i檔案。1 巨集定義的目的為了提高 的可讀性,此時對巨集定義進行原樣替換。2 在標頭檔案中主要包含函式的宣告 結構體的宣告等。宣告的目的是為了告訴編譯器做語法檢查,防 止呼叫時出現錯誤。此時在預處理的作用是把頭檔...