gcc 編譯過程

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

在執行上面語句時,-o實際上分多步來處理.c文件。下面我們講一下gcc的編譯過程。

預處理器處理

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

gcc -E hello.i -o hello.c

gcc -E參數讓gcc在預處理后停止編譯行為。

轉換為目標代碼

第二步gcc將hello.i編譯為目標代碼,這一步會檢測代碼中的語法錯誤。這個過程會生成.o文件,我們可以通過以下命令生成.o文件。

gcc -c hello.i -o hello.o

我們會發現.o文件是一堆亂碼,因為生成的是二進制文件。

鏈接為可執行文件

最后一步gcc將.o文件鏈接為可執行文件,命令如下。

gcc hello.o -o hello

最后執行文件

// ./后不能加空格
./hello
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容