首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux 靜態庫完整操作指南:建立、查看、提取、修改 .a 檔案

     編輯:關於C語言

基本概念

  • 靜態庫 = 多個目標檔 .o 打包而成的歸檔檔案(ar 格式)。
  • 副檔名慣例:.a (Linux/Unix), .lib (Windows)。
  • 連結時將符號解析並複製進可執行檔,無執行期依賴。

完整實戰流程

1. 撰寫原始碼

// 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);

2. 編譯目標檔

gcc -c add.c -o add.o
gcc -c mul.c -o mul.o

3. 建立靜態庫

ar cr libarith.a add.o mul.o
# c: 建立, r: 插入/替換 (成員存在則替換)
# 慣例命名 lib.a

4. 查看庫符號

nm libarith.a
# 輸出:
# add.o: 00000000 T add
# mul.o: 00000000 T mul

5. 使用靜態庫編譯程式

// 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

6. 執行

./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 等系統庫

ar 常用選項速查

選項含義
c建立庫(不提示)
r插入/替換成員
t列出成員
x提取成員
d刪除成員
v詳細輸出
s建立/更新符號索引 (相當 ranlib)

靜態庫 vs 動態庫

  • 靜態:編譯體積大、啟動快、無依賴地獄、程式碼重複佔用記憶體。
  • 動態:體積小、共用記憶體、支援熱更新、需處理版本相容與路徑搜尋。
  • 現代 Linux 發行版傾向動態庫,嵌入式/獨立部署常用靜態庫。

最佳實踐

  1. 庫原始碼嚴格分離 .h (介面) 與 .c (實現)。
  2. 發布時提供 libxxx.a、header.h、README (版本、編譯選項、授權)。
  3. 使用 ar crs 自動建立符號索引,加速連結器查找。
  4. 避免在庫中暴露內部符號(靜態函數、內部結構體),減少命名衝突。

掌握 ar 操作與靜態庫連結流程,是 Linux C/C++ 開發者構建可複用元件、管理專案依賴的核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved