code
gcc
compile
C
檔名: .c
檔名: .c
-> .i
將包含標頭檔文件插入原文件中、將macro展開展開、根據條件編譯命令選擇要使用的代碼
檔名: .i
-> .s
包含詞法分析 (Lexical analysis)、語法分析 (Parsing、Syntax analysis)、語意分析 (Semantic analysis)、符號表 (Symbol Table)、中間碼產生 (Intermediate Code Generation)、最佳化 (Code Optimization)、目標語言產生 (Code Generation)
x86-64
、ARM
、MIPS
)及作業系統(linux
, MacOS
,Linux
)而有不同,會需要這樣是因為對於不同的架構可以有不同的優化方式,並且可以使高階語言有可攜性,代表高階語言不需要為了不同的環境寫不同的程式碼,而是透過編譯器將程式碼轉成對應環境的組合語言檔名: .s
-> .o
(obj文件)
將低階語言所寫的程式翻譯成目的檔
檔名: .o
-> 執行檔
(default a.out
)
將多個目標檔或靜態函式庫 (Static library) 合併成一個可執行檔或函式庫的工具
是作業系統的一部份,用於把程式和動態函式庫 (Shared library) 的指令載入到記憶體 (RAM) 中等待 CPU 執行,當載入完成之後,作業系統會將控制權交給載入的程式碼,讓它開始運作
對載入的指令進行運算或儲存等操作
(不生成文件,需要把它重定向到一個輸出文件裡面)
gcc -E hello.c > pianoapan.txt
.c
->.s
gcc -S hello.c
.c
->.o
gcc -c hello.c
.c
->執行檔
(defaulta.out
)
gcc hello.c
(default
a.out
) -> 執行結果
./a.out
Makefile
分別處理,執行:預處理 編譯 匯編 ,先分別編譯它們,最後再把它們連接