gcc 編譯過(guò)程

//hello.c
#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}
gcc -o hello hello.c

在執(zhí)行上面語(yǔ)句時(shí),-o實(shí)際上分多步來(lái)處理.c文件。下面我們講一下gcc的編譯過(guò)程。

預(yù)處理器處理

首先gcc使用預(yù)處理器將.c文件中的include文件引入,相當(dāng)于把#include <stdio.h>替換為stdio.h里面的內(nèi)容,由于只是進(jìn)行文本替換,這一步不會(huì)檢測(cè)代碼中的語(yǔ)法錯(cuò)誤。這個(gè)過(guò)程會(huì)生成.i文件,我們可以通過(guò)以下命令生成.i文件。

gcc -E hello.i -o hello.c

gcc -E參數(shù)讓gcc在預(yù)處理后停止編譯行為。

轉(zhuǎn)換為目標(biāo)代碼

第二步gcc將hello.i編譯為目標(biāo)代碼,這一步會(huì)檢測(cè)代碼中的語(yǔ)法錯(cuò)誤。這個(gè)過(guò)程會(huì)生成.o文件,我們可以通過(guò)以下命令生成.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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容