本篇講述使用C語言編寫靜態連結庫,而且使用C和C++的方式來呼叫等.
一、靜態庫程式:執行時不獨立存在,連結到可執行檔案或者動態庫中,目標程式的歸檔。
1、用C編寫靜態庫步驟
a.建立專案(Win32 Static Library)
b.加入庫程式,原始檔使用C檔案 (Win32 Static Library)
clib.c庫原始檔
<pre name="code" class="cpp">int CLib_add(int add1,int add2)
{
return add1+add2;
}
int CLib_sub(int add1,int add2)
{
return add1-add2;
}
編譯,連結後產生clib.lib,後面使用這個檔案
2、靜態庫的使用
a.建立一個C檔案,能夠在檔案裡直接使用C庫函式,不須要標頭檔案,C編譯器僅僅是依據庫函式名稱,在庫中找到相應的函式程式碼,進行連結。
b.庫的路徑設定。專案的“Setting”中設定庫路徑,也能夠使用#pragmakeyword設定 #pragma comment(lib,"..\\clib\\clib.lib")
3、C的方式呼叫C語言編寫的靜態庫
C Type
//C編譯器什麼標頭檔案及函式宣告都不要.....
#pragma comment(lib,"..\\clib\\clib.lib") //通知連結器。到那找原始碼.
int main(void)
{
int num1 = 100;
int num2 = 1000;
int nSum = CLib_add(num1,num2);
int nSub = CLib_sub(num1,num2);
printf("nSum = %d,nSub = %d\r\n",nSum,nSub);
return 0;
}
</pre><pre name="code" class="cpp">4、<strong>C++的方式呼叫C語言編寫的靜態庫</strong>
在CPP環境使用C靜態庫。庫中函式原型定義要新增extern "C",比如:extern "C" int Add(...);
//C++函式必須宣告,這是C++的函式特點
//C函式不必宣告。這是C的特點
//C++編譯器編譯函式時,必須找到宣告,依照那種方式給函式進行編譯。
extern "C" int CLib_add(int num1,int num2); extern "C" int CLib_sub(int num1,int num2); //extern "C" 給c++編譯器看,這個是依照C語言格式進行編譯. //以上二句是給編譯器看得. #pragma comment(lib,"..\\clib\\clib.lib") //以上一句程式碼是給連結器看的. int main(void) { int num1 = 100; int num2 = 1000; nSum = CLib_add(num1,num2); nSub = CLib_sub(num1,num2); cout<<"nSum = "<<nSum<<" nSub = "<<nSub<<endl; return 0; }