創建一個hello.c文件,按步驟操作:
一、預編譯 <生成 hello.i文件 >
操作步驟:gcc -E hello.c -o hello.i
1.將所有的#define刪除,並展開所有的宏定義;
2.處理所有的預編譯指令,例如:#if,#elif,#else,#endif;
3.處理#include預編譯指令,將被包含的文件插入到預編譯指令的位置;
4.添加行號信息文件名信息,便於調試;
5.刪除所有的注釋:// /**/;
6.保留所有的#pragma編譯指令,因為在編寫程序的時候,我們經常要用到#pragma指令來設定編譯器的狀態或者是指示編譯器完成一些特定的動作。
生成.i文件。
包括(1)去注釋 (2)宏替換 (3)頭文件展開 (4)條件編譯
二、編譯(高級語言——>匯編語言)<生成hello.s文件>
操作步驟:gcc -S hello.i -o hello.s
主要作用:1.掃描(詞法分析),2.語法分析,3.語義分析,4.源代碼優化(中間語言生成),5.代碼生成,目標代碼優化。
三、匯編(匯編語言——>二進制文件)<生成hello.o文件>
操作步驟:gcc -c hello.s -o hello.o
主要作用:匯編器是將匯編代碼轉變成可以執行的指令,生成 目標文件。
四、鏈接(生成exe文件)
操作步驟:gcc hello.o -o hello
主要作用:鏈接過程主要包括:地址和空間的分配,符號決議和重定位。
地址和空間:系統給函數、變量分配地址和空間。
符號決議:也可以說地址綁定,分動態鏈接和靜態鏈接,
重定位:假設此時又兩個文件:A,B。A需要B中的某個函數mov的地址,未鏈接前將地址置為0,當A與B鏈接后修改目標地址,完成重定位
五、運行
操作步驟:./hello
主要功能:運行程序