第乙個階段是預編譯階段,在正式的編譯階段之前進行。預處編譯段將根據已放置在檔案中的預處理指令來修改原始檔的內容。如#include指令就是乙個預處理指令,它把頭檔案的內容新增到.cpp檔案中。巨集替換也是在預編譯階段完成的。在預編譯完成後,也即.i檔案中,所有以#開頭的語句都不存在,已經被替換了。
組合語言
**翻譯成目標
機器指令
。第四個階段是鏈結。合併符號表 合併section 調整段大小和段起始位置
符號重定位
將這個操作分解開來看:
1.預編譯:gcc main.c -e -o main.i
2.編譯:gcc main.i -s -o main.s
編譯:gcc -c main.c ---> main.o
一步生成可執行檔案:gcc main.c -o main --->main
預編譯,編譯,彙編,鏈結
2.編譯的工作內容 3.彙編的工作內容 4.鏈結器的工作內容 參考 include int main 使用gcc編譯器 gcc hello.c a.out a.out 含義是 assembler output 即 彙編輸出 上述過程可以分解為四個步驟 1.預處理 prepressing gcc e ...
C 預編譯 編譯 彙編 鏈結
windows中以2 2劃分核心 使用者空間,linux中以1 3劃分核心 使用者空間。在text段中,只有普通區域性變數是指令 int gdata1 10 data 已初始化且初始化不為零的資料 int gdata2 0 bss 未初始化或初始化為零的資料 int gdata3 bss stati...
Linux 預編譯 編譯 彙編 鏈結過程
當我們拿到乙個.cpp的檔案,我們看到它的 但我們又是知道它是怎樣執行的?我們都知道我們所看到的 都是高階語言。但計算機底層只能識別像0,1這樣的低階語言,所以這也是乙個將c c 轉成組合語言然後再變成機器語言的過程。具體可分為預編譯 編譯 彙編 鏈結四個過程。一 在liunx中這四個階段的具體命令...