靜态庫 (擴充名為 .a 或 .lib) 是包含函數的檔案,用于在link階段整合執行程式,動态連結庫(擴充名 .dll)是不在link階段整合進執行程式中的。
DLL檔案在執行階段動态調用
下面我們将用免費的開發工具CodeBocks開發靜态庫
建立靜态庫
啟動Codeblocks并建立一個類型為 "Static Library" (File/New/Project/Static Library/Go)的項目。
給項目取一個名字("malibrairie" for instance ), 并配置設定一個目标目錄("C:/essai" for instance )
删除main.cpp檔案中的預設内容。按照下面的内容輸入到程式中。
void cinq(int *i)
{
int n;
n=*i;n=5*n;
*i=n;
}
選擇"Build/Run"菜單。
Codeblocks立即生成庫檔案到 "C:/essai/malibrairie" 目錄并取名 "libmalibrairie a"。
Codeblocks 和 Devcpp 生成擴充名為 ".a" 的庫檔案,Visual Studio将生成擴充名為 ".lib"的庫檔案。
我們下面使用這個庫檔案。
庫檔案 "libmalibrairie.a" 已經被建立。
Create a new project with the type "Win32 GUI".
選擇應用程式類型 "Frame based"。
取名 ("monprogramme" ) 并標明項目目錄 ("C:/essai" )。
删除main.cpp預設的代碼然後将代碼替換為下面的代碼用于測試我們的靜态庫。
#include "windows.h"
extern "C" void cinq (int *);
int APIENTRY WinMain(HINSTANCE h1,HINSTANCE h2,LPSTR l,int n)
int x;
char texte[80];
x=2;
cinq(&x);
wsprintf(texte,"%d",x);
MessageBox(NULL,texte,"",MB_OK);
return 0;
通常, Codeblocks并不知道庫檔案被使用和它的位置,我們必須聲明庫檔案,讓它在連結的時候不會出錯。選擇菜單 "Project/Build options/Linker Settings" 添加"libmalibrairie.a"庫檔案。(親自測試,需要在linker搜尋目錄添加庫檔案的目錄)。
點選 "Build/Build and run"。程式正常運作。
在apue中使用-lapue庫的時候,直接寫成apue。。因為該靜态庫檔案已經加入到/usr/lib/libapue.a中了。。