.o 打包而成的歸檔檔案(ar 格式)。.a (Linux/Unix), .lib (Windows)。// add.c
int add(int a, int b) { return a + b; }
// mul.c
int mul(int a, int b) { return a * b; }
// header.h
int add(int a, int b);
int mul(int a, int b);
gcc -c add.c -o add.o
gcc -c mul.c -o mul.o
ar cr libarith.a add.o mul.o
# c: 建立, r: 插入/替換 (成員存在則替換)
# 慣例命名 lib.a
nm libarith.a
# 輸出:
# add.o: 00000000 T add
# mul.o: 00000000 T mul
// main.c
#include "header.h"
#include <stdio.h>
int main() {
printf("add: %d\n", add(3,4));
printf("mul: %d\n", mul(3,4));
return 0;
}
gcc main.c libarith.a -o main
# 或 gcc main.c -L. -larith -o main
./main
# add: 7
# mul: 12
ar x libarith.a mul.o # 提取 mul.o 到當前目錄
ar d libarith.a mul.o # 刪除 mul.o
ar r libarith.a new_mul.o # 替換/新增 (同名則替換)
ldd main
# 靜態連結無動態庫依賴,僅顯示 linux-vdso, libc 等系統庫
| 選項 | 含義 |
|---|---|
| c | 建立庫(不提示) |
| r | 插入/替換成員 |
| t | 列出成員 |
| x | 提取成員 |
| d | 刪除成員 |
| v | 詳細輸出 |
| s | 建立/更新符號索引 (相當 ranlib) |
.h (介面) 與 .c (實現)。libxxx.a、header.h、README (版本、編譯選項、授權)。ar crs 自動建立符號索引,加速連結器查找。掌握 ar 操作與靜態庫連結流程,是 Linux C/C++ 開發者構建可複用元件、管理專案依賴的核心技能。