gcc是什麼?
GNU編譯器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go語言的前端,也包括了這些語言的庫(如libstdc++、libgcj等等)。GCC的初衷是爲GNU操作系統專門編寫的一款編譯器。GNU系統是徹底的自由軟件。
gcc編譯的四個過程
gcc在執行編譯工作的時,分爲以下四個過程:
1.預處理,生成.i的文件
2.將預處理後的文件轉換成彙編語言,生成.s文件
3.彙編變爲目標代碼(機器代碼),生成.o的文件
4.連接目標代碼,生成可執行程序
盜用一張圖,圖解過程如下:
這裏我使用測試文件main.c來講解gcc編譯的四個過程
#include<stdio.h>
int main(void)
{
//print hello world
printf("Hello World\n");
return 0;
}
1.預處理,生成main.i文件
gcc -E main.c -> main.i
在linux中,預處理後的文件以.i爲後綴名,這個過程只激活預處理,不生成文件,因此你需要把它重定向到一個輸出文件裏 。
這一步的功能主要是宏的替換和註釋的消除。
查看main.i文件
2.將預處理後的文件轉換成彙編語言,生成.s文件
gcc -S main.c
生成main.s文件,用編輯器打開查看
3.彙編變爲目標代碼(機器代碼)生成.o的文件
gcc -c main.c
4.連接目標代碼,生成可執行程序
gcc main.o -o main
執行命令gcc main.o,默認生成a.out,這裏我指定的是生成main執行文件,main與a.out是同文件不同名
查看main文件:
測試運行
生成的所有文件
執行結果:
./main