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

VC++ 靜態連結庫建立與使用完整教學

     編輯:更多程式設計知識

靜態連結庫將函數編譯為 `.lib` 檔案,連結時將機器碼直接複製進 EXE,無執行期相依。本文以 VC++ 6.0 為例,示範從建立專案、撰寫程式碼、編譯產出 `.lib`,到呼叫端專案設定與使用的完整流程。

建立靜態連結庫專案

  1. File → New → Projects → **Win32 Static Library**,專案名 `LibTest`。
  2. 新增 `Lib.h`、`Lib.cpp`:
// 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; }
  1. 建置專案,產出 `LibTest.lib`(位於 `Debug/` 或 `Release/` 目錄)。

呼叫端專案使用靜態庫

方法一:#pragma comment 指定 .lib 路徑(推薦,專案可攜)

// Main.cpp
#include 
#include "..\LibTest\Lib.h"
#pragma comment(lib, "..\Debug\LibTest.lib")  // 相對路徑指定靜態庫

int main() {
    printf("2 + 3 = %d", add(2, 3));
    return 0;
}

方法二:VC++ 專案設定加入 Library 目錄

  1. Tools → Options → Directories → Library files。
  2. 新增 `LibTest.lib` 所在目錄(如 `..\Debug`)。
  3. 原始碼僅需 `#include "Lib.h"`,連結器自動尋找同名 `.lib`。

靜態庫運作原理

  • 編譯階段:`.cpp` → `.obj`(目標檔)。
  • 建庫階段:`Lib.exe` 將多個 `.obj` 封裝為 `.lib`(實際為 `.obj` 封存檔)。
  • 連結階段:連結器從 `.lib` 擷取呼叫到的函數機器碼,**直接合併進 EXE**。
  • 執行階段:無額外檔案相依,EXE 獨立運行。

靜態庫 vs 動態庫 (DLL) 快速比較

特性靜態庫 (.lib)動態庫 (.dll)
程式碼複製連結時複製進 EXE執行時載入共享記憶體
檔案體積EXE 較大EXE 較小,需附帶 DLL
更新部署需重新編譯 EXE僅替換 DLL 即可
記憶體共享每進程獨立副本多進程共享同一實體
符號解析連結期完成載入期/執行期完成

總結

靜態庫建立簡單、部署無相依,適合小型工具函數、演算法庫。掌握 `#pragma comment(lib, ...)` 與專案目錄設定兩種引用方式,可靈活應對不同專案結構需求。

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