程式編譯成可執行檔案的過程可分為四步:預處理、編譯、彙編、鏈結。下面將以main.c為目標檔案進行詳細講解:
通過gcc -e main.c -o main.i 生成.i檔案將進行如下操作:
1、將所有的#define刪除,並展開所有的巨集定義。
2、處理所有的預編譯指令,例如:#if,#elif,#else,#endif等。
3、處理#include預編譯指令,將被包含的檔案插入到預編譯指令的位置。
4、新增行號資訊、檔名標識,便於除錯。
5、刪除所有的注釋。
6、保留所有的#pragma編譯指令,因為在編寫程式的時候,我們經常要用到#pargma指令來設定編譯的狀態或者是指示編譯器完成一些特定的動作。
7、生成.i檔案(包括去注釋、巨集替換、標頭檔案展開、條件編譯),編譯生成的.i檔案不包含任何巨集定義,因為巨集已經被展開,並且包含的檔案已經被插入到.i檔案中。
通過gcc -s main.i –o main.s 生成.s檔案,需要進行如下操作:
1、掃瞄、語法分析、語義分析、源**分析、目標**生成、目標**優化。
2、生成彙編**。
3、彙總符號。
4、生成.s檔案。
通過gcc –c main.s –o main.o 生成.o檔案,需要進行如下操作:
1、根據彙編指令和特定平台,把彙編指令翻譯成二進位制形式。
2、合併各個section,合併符號表。
3、生成.o檔案。
1、合併各個.obj檔案的section,合併符號表,進行符號解析。
2、符號位址重定位。
3、生成可執行檔案。
GCC編譯過程(預處理 編譯 彙編 鏈結)
gcc編譯過程 預處理 編譯 彙編 鏈結 這裡gcc編譯器 是指在linux類作業系統下,windows編譯器 mingw 相當於windows版gcc 乙個c c 檔案要經過預處理 preprocessing 編譯 compilation 彙編 assembly 和鏈結 linking 等4步才能...
程式編譯的四個過程
hello.c 源程式 是一條高階c語言程式,雖然它是以一種易讀的形式,讓人們容易理解。但是,它卻無法直接驅動硬體cpu直接執行。為了我們編寫的hello.c程式可以被執行,驅動硬體電路工作,hello.c程式必須經過一些列處理步驟,將源程式轉化為可執行性的目標程式。而我們知道,機器語言就是處理器可...
預處理,編譯, 優化, 彙編
優化,彙編,鏈結 rel noopener noreferrer 預處理,編譯,優化,彙編,鏈結 可憐的無知 編譯 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源...