VS下生成與配置靜態庫與動態庫(一)

luyan_abaci發表於2015-08-26

此處僅以VS2010為例,詳細說明一下如何在VS環境下生成和使用C++的靜態庫與動態庫。Qt下生成和使用靜態和動態庫後續再講。

本文僅供初學者參考,如果有問題歡迎大家指正。

       首先簡單地理解一下靜態庫與動態庫,以及兩者的區別。

靜態庫(*.lib): 將*.cpp檔案中的函式的地址和定義,以及函式之間的連結關係通通打包,生成的一個二進位制檔案;

動態庫(*.lib+*.dll): 動態庫的*.lib檔案,打包的只是*.cpp檔案中函式的地址和連結,函式的具體定義打包在*.dll檔案中。

聯絡:

1.二者都不包含函式的宣告部分,因此呼叫這兩種庫的時候,都需要包含相應的標頭檔案(*.h);

2.靜態庫和動態庫的*.lib檔案,在生成可執行檔案(*.exe)的時候,都將被打包進*.exe檔案中;

區別:

1.靜態庫的*.lib檔案遠大於動態庫的*.lib檔案;

2.動態庫的*.dll檔案作為可執行檔案*.exe的附加檔案加入到程式中,一般放在*.exe的同級目錄下。


簡單地介紹完這兩種庫,下面來看看在VS下是怎麼生成和使用的。

       

靜態庫:

生成

1.新建一個空的Visual Studio 2010 ,Visual C++, Win32 控制檯工程,取名為“testlib”;

(你可以在嚮導中選擇靜態庫選項,也可以在後續的設定中設定生成靜態庫,這裡我們在後面進行設定);

2.構造一個類用於測試,這裡叫做“CAdd”類,進行的是整數的加法運算,宣告和實現分別儲存在檔案“add.h”和

“add.cpp”中:

“add.h”:

#ifndef ADD_H
#define ADD_H

class CAdd
{
public:
	CAdd();
	~CAdd();
	int add(int a, int b);
};

#endif

"add.cpp":

#include "add.h"
CAdd::CAdd()
{

}

CAdd::~CAdd()
{

}

int CAdd::add(int a, int b)
{
	return a+b;
}

可以在“屬性”->"C++"->"預編譯頭"下選擇“不使用預編譯頭”去掉cpp檔案的“stdafix.h”的新增要求

3. 選擇編譯為靜態庫:

在“屬性”->“配置屬性"->”常規“->”配置型別“下選擇”靜態庫(.lib)“(預設是"應用程式(.exe)"),在此介面上可以更改輸出檔案(.lib)所在的目錄,

以及lib檔案的名稱(預設是工程的名稱):




4.選擇生成解決方案,這時在你剛剛選擇的輸出資料夾下(這裡是lib資料夾),已經生成了靜態庫檔案,add.lib


使用

       使用很簡單:

1.屬性-》配置屬性-》C/C++->常規-》附加包含目錄,填寫”add.h“所在目錄;

  2.屬性-》配置屬性-》連結器-》附加依賴項,填寫”add.lib“;

3.屬性-》配置屬性-》連結器-》附件依賴目錄,填寫”add.lib“所在目錄;

4.在用到CAdd這個類的地方新增標頭檔案包含#include<add.h>

5.具體呼叫CAdd類的函式


下一篇將介紹如何在Visual Studio下生成和使用動態連結庫


相關文章