靜態庫 (擴展名為 .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" 已經被創建。
Use the static library
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中了。。