本篇講述使用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; }