目錄
一、動態鏈接庫和靜態鏈接庫的區別
二、對比
1、靜態鏈接庫 (Static Library)
2、動態鏈接庫 (Dynamic Library)
三、制作步驟
1. 創建類頭文件
2. 實現類
3. 創建靜態鏈接庫工程
4. 構建靜態鏈接庫
5. 使用靜態鏈接庫
6、添加靜態庫和頭文件路徑
一、動態鏈接庫和靜態鏈接庫的區別
靜態鏈接庫(Static Library)和動態鏈接庫(Dynamic Library)是兩種不同的代碼復用和模塊化方法。它們在構建、鏈接、分發和使用方面有許多重要的區別。
二、對比
1、靜態鏈接庫 (Static Library)
- 文件擴展名:在Windows中通常是
.lib
,在Linux中是.a
。 - 鏈接時間:在編譯時將庫代碼復制到每個使用它的可執行文件中。
- 運行時依賴:不需要在運行時提供庫文件,因為庫代碼已經包含在可執行文件中。
- 文件大小:由于每個可執行文件都包含庫代碼,所以生成的可執行文件較大。
- 版本控制:更容易控制和測試,因為庫代碼在編譯時已經確定,不會在運行時改變。
2、動態鏈接庫 (Dynamic Library)
- 文件擴展名:在Windows中通常是
.dll
,在Linux中是.so
。 - 鏈接時間:在編譯時生成對庫的引用,而不復制庫代碼。實際的庫代碼在運行時加載。
- 運行時依賴:需要在運行時提供庫文件。
- 文件大小:由于庫代碼不包含在可執行文件中,所以生成的可執行文件較小。
- 版本控制:庫文件可以獨立更新,多個可執行文件可以共享同一個庫文件。
三、制作步驟
將一個C++類定義成靜態鏈接庫(Static Library),與動態鏈接庫(DLL)的步驟類似,但有一些不同。
1. 創建類頭文件
定義你要封裝的類。例如,創建一個名為MyClass
的類:
// MyClass.h
#pragma onceclass MyClass {
public:MyClass();~MyClass();void SayHello();
};
2. 實現類
實現這個類的方法:
// MyClass.cpp
#include "MyClass.h"
#include <iostream>MyClass::MyClass() {}MyClass::~MyClass() {}void MyClass::SayHello() {std::cout << "Hello from MyClass!" << std::endl;
}
3. 創建靜態鏈接庫工程
在 Visual Studio 中創建一個新的靜態鏈接庫工程:
- 打開 Visual Studio,創建一個新的項目。
- 選擇
Static Library (LIB)
項目類型。 - 添加
MyClass.h
和MyClass.cpp
文件到項目中。
4. 構建靜態鏈接庫
構建工程,將會生成一個 .lib
文件(例如 MyLibrary.lib
)。
5. 使用靜態鏈接庫
要使用這個靜態鏈接庫,需要在另一個項目中導入它:
// main.cpp
#include <iostream>
#include "MyClass.h"int main() {MyClass myClass;myClass.SayHello();return 0;
}
在你的新項目中,確保以下幾點:
- 將生成的
MyLibrary.lib
文件添加到新項目的鏈接器輸入中。 - 確保
MyClass.h
頭文件在新項目的包含路徑中。
6、添加靜態庫和頭文件路徑
在新項目中配置靜態庫和頭文件路徑:
- 右鍵點擊新項目,選擇“屬性”。
- 在左側面板中選擇“C/C++” -> “常規”。
- 在“附加包含目錄”中添加靜態庫的頭文件路徑。
- 在左側面板中選擇“鏈接器” -> “常規”。
- 在“附加庫目錄”中添加靜態庫文件的路徑。
- 在左側面板中選擇“鏈接器” -> “輸入”。
- 在“附加依賴項”中添加靜態庫文件名(例如
MyLibrary.lib
)。