
gcc -E file.c -o hello.i
#include、#define、#ifdef 等指令。.i 檔(純 C 代碼,無預處理指令)。#pragma 指導編譯器狀態/特定動作。gcc -S file.c -o hello.S
.S(文本格式)。gcc -c hello.S -o hello.o
.o)。靜態鏈接:
.o + .a(靜態庫) → 可執行文件。
動態鏈接:
.o + .so(動態庫) → 可執行文件(含動態庫引用)。
| 項目 | 靜態鏈接 | 動態鏈接 |
|---|---|---|
| 時機 | 編譯期 | 運行期 |
| 庫文件 | .a | .so / .dll |
| 可執行文件體積 | 大 | 小 |
| 內存佔用 | 大(重複載入) | 小(共享) |
| 啟動速度 | 快 | 稍慢 |
| 庫升級 | 需重新鏈接 | 替換 .so 即可 |
gcc -E file.c -o hello.i # 僅預處理
gcc -S file.c -o hello.S # 編譯至匯編
gcc -c hello.S -o hello.o # 匯編至目標文件
gcc hello.o -o hello # 鏈接生成可執行文件
gcc file.c -o hello # 一步到位