gcc編譯過程總結
第一步: 對源文件進行預處理, 需要使用的gcc參數為 -E
# 1. 預處理, -o 指定生成的文件名
$ gcc -E test.c -o test.i
第二步: 編譯預處理之后的文件, 需要使用的gcc參數為 -S
# 2. 編譯, 得到匯編文件
$ gcc -S test.i -o test.s
第三步: 對得到的匯編文件進行匯編, 需要使用的gcc參數為-c
# 3. 匯編
$ gcc -c test.s -o test.o
第四步: 將得到的二進制文件和標準庫進制鏈接, 得到可執行的二進制文件, 不需要任何參數
# 4. 鏈接
$ gcc test.o -o test
注意: 在使用gcc編譯程序的時候指定-o或-c會自動執行幾個步驟
gcc常用參數-E 預處理指定的源文件,不進行編譯
-S 編譯指定的源文件,但是不進行匯編 -c 編譯、匯編指定的源文件,但是不進行鏈接 -o [file1] [file2] / [file2] -o [file1] 將文件 file2 編譯成文件 file1 -I directory (大寫的i) 指定 include 包含文件的搜索目錄 -g 在編譯的時候,生成調試信息,該程序可以被調試器調試 -D 在程序編譯的時候,指定一個宏 -w 不生成任何警告信息, 不建議使用, 有些時候警告就是錯誤 -Wall 生成所有警告信息 -On n的取值范圍:0~3。編譯器的優化選項的4個級別,-O0表示沒有優化,-O1為缺省值,-O3優化級別最高 -l 在程序編譯的時候,指定使用的庫 -L 指定編譯的時候,搜索的庫的路徑。 -fPIC/fpic 生成與位置無
-D參數實例
int main()
{
int a = 10;
#ifdef DEBUG
printf("這是調試代碼\n");
#endif
printf("這是發布代碼\n");
}
# 在編譯命令中定義這個DEBUG 宏,
$ gcc test.c -o app -D DEBUG
執行后的輸出結果:這是調試代碼

浙公網安備 33010602011771號