1. 程式人生 > >gcc -o hello hello.c 執行過程

gcc -o hello hello.c 執行過程

不同 單獨 內容 擴展名 c編譯器 方式 文本格式 c程序 打包

GCC編譯器驅動程序讀取源程序文件hello.c,並將它翻譯成一個可執行目標文件hello。這個翻譯的過程可分為四個階段。

1.預處理階段

預處理器(cpp)根據以字符#開頭的命令,修改原始的c程序。比如hello.c中第1行的#include<stdio.h>命令告訴預處理器讀取系統頭文件stdio.h的內容,並將它直接插入到程序文本中。結果就得到了另一個C程序,通常是以 .i 作為文件擴展名。

2.編譯階段

編譯階段將文本文件hello.i 翻譯成文本文件hello.s,它包含一個匯編語言程序。匯編語言程序中的每條語句都以一種標準的文本格式確切地描述了一條低級程序機器語言指令。匯編語言是非常有用的,應為它為不同的高級語言的不同編譯器提供了通用的輸出語言。例如,c編譯器和Fortran編譯器產生的輸出文件用的都是一樣的匯編語言。

3.匯編階段

接下來,匯編器將hello.s 翻譯成機器語言指令,把這些指令打包成一種叫做可重定位目標程序的格式,並將結果保存在目標文件hello.o 中。hello.o文件時一個二進制文件,它的字節編碼是機器語言指令而不是字符。

4.鏈接階段

請註意,hello調用了printf函數,它是每個c編譯器都會提供的標準C庫中的一個函數。printf 函數存在於一個名為printf.o 的單獨的預編譯好了的目標文件中,而這個文件必須以某種方式合並到我們的hello.o 程序中。鏈接器就負責處理這種合並。結果就得到hello文件,它是一個可執行目標文件(或者簡稱可執行文件),可以被加載到內存中,由系統執行。

gcc -o hello hello.c 執行過程