GCC 完整編譯流程包含四個階段,理解這有助於排錯與優化:
#include、#define、條件編譯,產生 .i 檔。.s 檔。.o。.o 及函式庫合併為最終執行檔。對應指令:
gcc -E hello.c -o hello.i # 僅預處理 gcc -S hello.i -o hello.s # 僅編譯至組語 gcc -c hello.s -o hello.o # 僅組譯 gcc hello.o -o hello # 僅連結
以下在 Ubuntu 終端機逐步操作:
cd ~ # 進入家目錄 mkdir GCC_Demo && cd GCC_Demo vim hello.c # 編輯原始碼
hello.c 內容:
#includeint main(void) { printf("Hello, GCC World!\n"); return 0; }
編譯並執行:
gcc hello.c -o hello # 一鍵完成四階段,產生 hello 執行檔 ./hello # 執行,輸出 Hello, GCC World!
| 參數 | 說明 |
|---|---|
-Wall | 開啟所有常見警告(強烈建議常開) |
-O2 | 啟用 O2 最佳化,平衡速度與大小 |
-g | 嵌入除錯資訊,供 GDB 使用 |
-std=c11 | 指定 C 標準(c99/c11/c17) |
-I/path | 加入標頭檔搜尋路徑 |
-L/path -llib | 加入函式庫搜尋路徑與連結庫 |
Windows 靠副檔名 .exe 判斷可執行;Linux 則看檔案權限位:
ls -l hello # -rwxr-xr-x 1 user user 16K Jan 1 12:00 hello # ^^^ 擁有者有 x (execute) 權限即可執行
若無執行權限,可用 chmod +x hello 增加。
# main.c, utils.c, utils.h gcc -Wall -O2 -c utils.c -o utils.o gcc -Wall -O2 -c main.c -o main.o gcc main.o utils.o -o myapp
或使用 Makefile 自動化建構,大型專案建議改用 CMake/Meson。