編譯和鏈接過程步驟

1、預編譯

    gcc -E hello.c -o hello.i

    源代碼文件hello.c和相關的頭文件(如stdio.h),被【預編譯器(cpp)】預編譯成一個.i文件;

    預編譯過程,主要處理那些源代碼中的,以#開頭的預編譯指令;

   如 :展開所有的宏定義(#define),

           處理所有的條件預編譯指令(#if,#ifdef,#else,#endif等),

           將被包含的文件插入到預編譯指令所在位置(#include),

           去除所有的註釋行(//,/* */),

           添加行號和文件名標識,

           保留所有的編譯器指令(#program),

    經過預編譯後的.i文件,不包含任何宏定義。

 

2、編譯

    gcc -S hello.i -o hello.s

    對預編譯後的文件,進行一系列的詞法分析,語法分析,語義分析和優化,產生相應的彙編代碼文件;

 

3、彙編

    as hello.s -o hello.o 或 gcc -c hello.s -o hello.o

    彙編過程,將彙編代碼轉換爲機器可以執行的指令,每一條彙編指令幾乎都會對應一條機器指令;

 

4、鏈接

    鏈接過程,處理各個模塊之間的相互引用,使各個模塊之間能夠正確銜接起來;

    包括:地址和控件分配,符號決議和重定位等;

    鏈接過程,本質上是就是一個模塊拼裝過程;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章