C語言編寫靜態連結庫及其使用

weixin_34162629發表於2015-12-19

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



相關文章