靜態連結庫將函數編譯為 `.lib` 檔案,連結時將機器碼直接複製進 EXE,無執行期相依。本文以 VC++ 6.0 為例,示範從建立專案、撰寫程式碼、編譯產出 `.lib`,到呼叫端專案設定與使用的完整流程。
// Lib.h
#ifndef LIB_H
#define LIB_H
extern "C" int add(int x, int y); // C連結規格,避免名稱修飾
#endif
// Lib.cpp
#include "Lib.h"
int add(int x, int y) { return x + y; }

// Main.cpp #include#include "..\LibTest\Lib.h" #pragma comment(lib, "..\Debug\LibTest.lib") // 相對路徑指定靜態庫 int main() { printf("2 + 3 = %d", add(2, 3)); return 0; }

| 特性 | 靜態庫 (.lib) | 動態庫 (.dll) |
|---|---|---|
| 程式碼複製 | 連結時複製進 EXE | 執行時載入共享記憶體 |
| 檔案體積 | EXE 較大 | EXE 較小,需附帶 DLL |
| 更新部署 | 需重新編譯 EXE | 僅替換 DLL 即可 |
| 記憶體共享 | 每進程獨立副本 | 多進程共享同一實體 |
| 符號解析 | 連結期完成 | 載入期/執行期完成 |
靜態庫建立簡單、部署無相依,適合小型工具函數、演算法庫。掌握 `#pragma comment(lib, ...)` 與專案目錄設定兩種引用方式,可靈活應對不同專案結構需求。