天天看點

codeblocks建立和使用靜态庫(C語言)

靜态庫  (擴充名為 .a 或 .lib) 是包含函數的檔案,用于在link階段整合執行程式,動态連結庫(擴充名  .dll)是不在link階段整合進執行程式中的。

DLL檔案在執行階段動态調用

下面我們将用免費的開發工具CodeBocks開發靜态庫

建立靜态庫

啟動Codeblocks并建立一個類型為 "Static Library" (File/New/Project/Static Library/Go)的項目。

codeblocks建立和使用靜态庫(C語言)

給項目取一個名字("malibrairie" for instance ), 并配置設定一個目标目錄("C:/essai" for instance )

codeblocks建立和使用靜态庫(C語言)

删除main.cpp檔案中的預設内容。按照下面的内容輸入到程式中。

void cinq(int *i)

{

int n;

n=*i;n=5*n;

*i=n;

}

codeblocks建立和使用靜态庫(C語言)

選擇"Build/Run"菜單。

codeblocks建立和使用靜态庫(C語言)

Codeblocks立即生成庫檔案到 "C:/essai/malibrairie" 目錄并取名 "libmalibrairie a"。

codeblocks建立和使用靜态庫(C語言)

Codeblocks 和 Devcpp 生成擴充名為 ".a" 的庫檔案,Visual Studio将生成擴充名為 ".lib"的庫檔案。

我們下面使用這個庫檔案。

庫檔案 "libmalibrairie.a" 已經被建立。

Create a new project with the type "Win32 GUI".

codeblocks建立和使用靜态庫(C語言)

選擇應用程式類型 "Frame based"。

codeblocks建立和使用靜态庫(C語言)

取名 ("monprogramme" ) 并標明項目目錄 ("C:/essai" )。

codeblocks建立和使用靜态庫(C語言)

删除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建立和使用靜态庫(C語言)

通常, Codeblocks并不知道庫檔案被使用和它的位置,我們必須聲明庫檔案,讓它在連結的時候不會出錯。選擇菜單 "Project/Build options/Linker Settings" 添加"libmalibrairie.a"庫檔案。(親自測試,需要在linker搜尋目錄添加庫檔案的目錄)。

codeblocks建立和使用靜态庫(C語言)

點選 "Build/Build and run"。程式正常運作。

codeblocks建立和使用靜态庫(C語言)

在apue中使用-lapue庫的時候,直接寫成apue。。因為該靜态庫檔案已經加入到/usr/lib/libapue.a中了。。

繼續閱讀