//hello.c
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
gcc -o hello hello.c
在執(zhí)行上面語句時(shí)搪哪,-o實(shí)際上分多步來處理.c文件巡扇。下面我們講一下gcc的編譯過程孝鹊。
預(yù)處理器處理
首先gcc使用預(yù)處理器將.c文件中的include文件引入炊琉,相當(dāng)于把#include <stdio.h>替換為stdio.h里面的內(nèi)容,由于只是進(jìn)行文本替換又活,這一步不會(huì)檢測(cè)代碼中的語法錯(cuò)誤苔咪。這個(gè)過程會(huì)生成.i文件,我們可以通過以下命令生成.i文件柳骄。
gcc -E hello.i -o hello.c
gcc -E參數(shù)讓gcc在預(yù)處理后停止編譯行為团赏。
轉(zhuǎn)換為目標(biāo)代碼
第二步gcc將hello.i編譯為目標(biāo)代碼,這一步會(huì)檢測(cè)代碼中的語法錯(cuò)誤耐薯。這個(gè)過程會(huì)生成.o文件舔清,我們可以通過以下命令生成.o文件。
gcc -c hello.i -o hello.o
我們會(huì)發(fā)現(xiàn).o文件是一堆亂碼曲初,因?yàn)樯傻氖嵌M(jìn)制文件体谒。
鏈接為可執(zhí)行文件
最后一步gcc將.o文件鏈接為可執(zhí)行文件,命令如下臼婆。
gcc hello.o -o hello
最后執(zhí)行文件
// ./后不能加空格
./hello