一、預編譯
他的命令是gcc -e main.c -o main.o 假設當前要編譯的檔案是main.c
1.將所有的#define刪除,並展開所有的巨集定義;
2.處理所有的預編譯指令,例如:#if,#elif,#else,#endif;
3.處理#include預編譯指令,將被包含的檔案插入到預編譯指令的位置;
4.新增行號資訊檔名標識,便於除錯;
5.刪除所有的注釋:
6.保留所有的#pragma編譯指令,因為在編寫程式的時候,我們經常要用到#pragma指令來設定編譯器的狀態或者是
指示編譯器完成一些特定的動作。
生成.i檔案。
包括去注釋 ,巨集替換 ,標頭檔案展開,條件編譯
經編譯後的.i檔案不包含任何巨集定義,因為所有的巨集已經被展開,並且包含的檔案已經被插入到.檔案中
二、編譯:c語言——》彙編
他的命令是:gcc -s main.i -o main.s
1.掃瞄,語法分析,語義分析,源**優化,目標**生成,目標**優化;
2.生成彙編**;
3.彙總符號;
4.生成.s檔案
三、彙編:彙編——》二進位制
他的命令是:gcc -c main.s -o main.o
1.根據彙編指令和特定平台,把彙編指令翻譯成二進位制形式;
2.合併各個section,合併符號表;
3.生成.o檔案
四、鏈結
1.合併各個.obj檔案的section,合併符號表,進行符號解析;
2.符號位址重定位;
3.生成可執行檔案
也可以從c源**開始經過預處理,編譯,彙編,鏈結直接輸出可執行檔案
他的命令是:gcc -c main.s -o main.o
linux 編譯程式的四個過程
linux 編譯程式的過程與c c 程式編譯過程類似,只是使用的命令或實現的方法不一樣 環境平台不一樣 但是總體框架一樣。一 預編譯 命令是gcc e main.c o main.o 假設當前要編譯的檔案是main.c 1 將所有的 define刪除,並展開所有的巨集定義 2 處理所有的預編譯指令,...
程式編譯的四個過程
hello.c 源程式 是一條高階c語言程式,雖然它是以一種易讀的形式,讓人們容易理解。但是,它卻無法直接驅動硬體cpu直接執行。為了我們編寫的hello.c程式可以被執行,驅動硬體電路工作,hello.c程式必須經過一些列處理步驟,將源程式轉化為可執行性的目標程式。而我們知道,機器語言就是處理器可...
GCC編譯程式時的四個階段說明!
在使用gcc進行程式的編譯時通常要經歷四個階段 通常指的是從源程式到可執行的二進位制 這整個過程 一些以hello.c為例來說明這四個階段。hello.c includeint main gcc的四個階段如下 1.預處理階段 2.編譯階段 3.彙編階段 4.鏈結階段 四個階段的詳細資訊如下 1.預處...