C語言編寫靜態鏈接庫及其使用


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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM