1、靜態庫的生成:
在vc6.0++中Ctrl+N選擇Projects下的Win32 Static Library,Project name:SumLib,點擊OK,下一頁中的兩項可選可不選,點擊Finish完成。
在此工程中新建lib.h和lib.cpp兩個文件,源碼如下:
//lib.h #ifndef LIB_H #define LIB_H int add(int x, int y); #endif //lib.cpp #include "lib.h" #include "StdAfx.h"//此處不加此語句總是出錯 int add(int x, int y) { return (x+y); }
編譯這個工程就得到了SumLib.lib文件,此文件就是一個函數庫,它提供了add的功能。將lib.h頭文件和SumLib.lib提交給用戶后,用戶就可以直接使用其中的add函數了。
2、靜態庫的調用:
新建一個控制台應用程序,僅有一個main.cpp文件,源碼如下:
#include "lib.h" #include <iostream> using namespace std; #pragma comment(lib, "SumLib.lib") //指定與靜態庫一起連接 int main(int argc, char* agrv[]) { int sum = add(4, 5); cout<<sum<<endl; return 0; }
將生成的lib.h頭文件和SumLib.lib靜態庫放到此工程的目錄下即可執行。
靜態鏈接庫與動態鏈接庫都是共享代碼的方式,它們的區別在於以下兩點:
(1)采用靜態鏈接庫(lib)時,lib中的指令被全部直接包含在最終生成的exe文件中;但采用dll時,該dll不必被包含在最終exe文件中,exe文件執行時可以“動態”地引用和卸載這個與exe獨立的dll文件,從而在運行時節省系統資源。
(2)靜態鏈接庫中不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接庫。
(3)靜態鏈接庫由.h和.lib文件組成,.h文件要聲明.lib中供外界調用的函數的原型,不能缺少。
(4)VC6中調用靜態鏈接庫.lib一共有3種方法:
①使用語句#include "lib.h",並將lib.h拷貝到當前工程目錄下;對SumLib.lib使用語句 #pragma comment(lib,"***//SumLib.lib"),將SumLib.lib拷貝到目錄"***//SumLib .lib"下。
②使用語句#include “lib.h",並在工具->選項->目錄->路徑中添加lib.h的路徑;對SumLib.lib,在工程->設置->連接->對象/庫模塊中添加SumLib.lib,並在工具->選項->目錄->路徑中添加SumLib.lib的路徑。
③lib.h文件的處理同①或②;對SumLib.lib,在工程->添加到工程->文件中導入此.lib文件。