GCC編譯hello c的詳細過程

2021-05-23 13:12:10 字數 1210 閱讀 3534

gcc --help檢視gcc引數用法

-e                       preprocess only; do not compile, assemble or link

-s                       compile only; do not assemble or link

-c                       compile and assemble, but do not link

-o place the output into 

hello.c->hello.i->hello.s->hello.o->hello

1.hello.c->hello.i

預處理階段:

預處理器根據#開頭的命令,修改原始的c程式。比如hello.c中的#include指令告訴預處理器讀取系統標頭檔案stdio.h的內容,並把它直接插入到程式文字中去。又比如替換用define定義的巨集。結果就得到了另乙個c程式,通常是以.i作為副檔名。

2.hell.c -e > hello.i

編譯階段:

編譯器將文字檔案hello.i翻譯成文字檔案hello.s,它包含乙個組合語言程式。組合語言程式中的每條語句都以一種標準的文字格式確切地描述了一條低階機器語言指令。例如,c編譯器和fortran編譯器產生的輸出檔案用的都是一樣的組合語言。

gcc hello.c -s

使用cat檢視hello.s,發現就是一條條的彙編指令

3.hello.s->hello.o

彙編階段:

將hello.s翻譯成機器語言指令,把這些指令打包成為一種叫做可重定位目標程式的格式,並將結果儲存在目標檔案hello.o中。hello.o檔案是乙個二進位制檔案,它的位元組編碼是機器語言指令而不是字元。

gcc hello.c -o hello.o

4.鏈結階段:hello程式呼叫了printf函式,它是標準c庫中的乙個函式,每個c編譯器都提供。printf函式存在於乙個名為printf.o的單獨的預編譯目標檔案中,而這個檔案必須以某種方式併入到我們的hello.o檔案。鏈結器就負責處理這種併入,結果就得到hello檔案,它是乙個可執行目標檔案。

要執行該程式,只需輸入可執行檔案的路徑  $ ./hello  

btw:

解決 /homt/uboot/demo/目錄下 gcc hello.c提示permission denied的辦法是 cd ~/ 切換到/home/使用者目錄下再進行編譯

gcc詳細編譯過程

2.2 gcc使用語法 2.3 gcc常用選項 2.3.3 改善 3.字尾名決定編譯過程 1.預處理 2.編譯 3.彙編 4.鏈結 我們經常使用 編譯 泛指上面的4個步驟之一,甚至有時候會囊括這四個步驟。對於嵌入式linux開發來說,用到的程式語言有c,c 彙編。將乙個大型程式 包含有作業系統 編譯...

GCC的編譯過程

用編譯器gcc生成可執行檔案,看似簡單的一步完成,其實包含了四個過程。分別是 預處理 pre processing 這一步需要分析各種預處理命令,如 define include if,ifndef,ifdef,endif,undef等。對於巨集而言,gcc會將巨集定義的內容直接替換,include...

gcc的編譯過程

乙個.c檔案變成乙個可執行檔案需要四個步驟,如下圖所示 選項功能 v檢視gcc編譯器的版本,顯示gcc執行時的詳細過程 o 指定輸出檔名為file,這個名稱不能跟源檔名同名 e只預處理,不會編譯 彙編 鏈結 s只編譯,不會彙編和鏈結 c編譯和彙編,不會鏈結 1 通過 gcc e o i c 只預處理...