Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 靜態函式庫 建立與使用完整教學

編輯:Linux 系統常見問題解答

靜態函式庫(Static Library)是目標檔(.o)的封存檔(.a),連結時將程式碼複製進執行檔,優點:無執行期相依、保護原始碼、重新連結快。本文以 add() 函式為例示範完整流程。

基本概念

  • 系統庫位於 /usr/lib, /lib,如 libc.a, libm.a
  • 連結選項 -lname 對應 libname.a
  • 標頭檔宣告介面,.a 提供實作

範例程式碼

// tiger.h
#ifndef __TIGER__
#define __TIGER__
int add(int a, int b);
#endif

// tiger.c
int add(int a, int b) { return a + b; }

// main.c
#include <stdio.h>
#include "tiger.h"
int main() { printf("sum=%d\n", add(3,5)); return 0; }

建立靜態庫

# 1. 編譯目標檔
gcc -c tiger.c -o tiger.o

# 2. 封存為 .a
ar -rcs libadd.a tiger.o
# -r 插入/替換, -c 建立, -s 建立索引

使用靜態庫

# 方式一:直接指定 .a 路徑
gcc main.c libadd.a -o main

# 方式二:-l 連結(需 -L 指定搜尋目錄)
gcc main.c -L. -ladd -o main
# -L. 表示當前目錄

常見錯誤與解決

  • cannot find -ladd:未指定 -L 路徑或庫檔命名不符 lib*.a
  • -o 必須置於 -l 之前,否則被誤認為輸出檔名
  • 標頭檔 #include "tiger.h" 仍需提供,編譯期檢查介面

進階:Makefile 自動化

CC=gcc
AR=ar
CFLAGS=-Wall
TARGET=main
LIB=libadd.a
OBJS=tiger.o

all: $(TARGET)

$(LIB): $(OBJS)
	$(AR) -rcs $@ $^

$(TARGET): main.c $(LIB)
	$(CC) $(CFLAGS) -o $@ main.c -L. -ladd

clean:
	rm -f *.o *.a $(TARGET)

掌握靜態庫建置流程,模組化開發與程式碼保護兩全其美。

Copyright © Windows教程網 All Rights Reserved