C++ 把類封裝成靜態鏈接庫

目錄

一、動態鏈接庫和靜態鏈接庫的區別

二、對比

1、靜態鏈接庫 (Static Library)

2、動態鏈接庫 (Dynamic Library)

三、制作步驟

1. 創建類頭文件

2. 實現類

3. 創建靜態鏈接庫工程

4. 構建靜態鏈接庫

5. 使用靜態鏈接庫

6、添加靜態庫和頭文件路徑


一、動態鏈接庫和靜態鏈接庫的區別

靜態鏈接庫(Static Library)和動態鏈接庫(Dynamic Library)是兩種不同的代碼復用和模塊化方法。它們在構建、鏈接、分發和使用方面有許多重要的區別。

二、對比

1、靜態鏈接庫 (Static Library)

  1. 文件擴展名:在Windows中通常是.lib,在Linux中是.a
  2. 鏈接時間:在編譯時將庫代碼復制到每個使用它的可執行文件中。
  3. 運行時依賴:不需要在運行時提供庫文件,因為庫代碼已經包含在可執行文件中。
  4. 文件大小:由于每個可執行文件都包含庫代碼,所以生成的可執行文件較大。
  5. 版本控制:更容易控制和測試,因為庫代碼在編譯時已經確定,不會在運行時改變。

2、動態鏈接庫 (Dynamic Library)

  1. 文件擴展名:在Windows中通常是.dll,在Linux中是.so
  2. 鏈接時間:在編譯時生成對庫的引用,而不復制庫代碼。實際的庫代碼在運行時加載。
  3. 運行時依賴:需要在運行時提供庫文件。
  4. 文件大小:由于庫代碼不包含在可執行文件中,所以生成的可執行文件較小。
  5. 版本控制:庫文件可以獨立更新,多個可執行文件可以共享同一個庫文件。

三、制作步驟

將一個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 中創建一個新的靜態鏈接庫工程:

  1. 打開 Visual Studio,創建一個新的項目。
  2. 選擇 Static Library (LIB) 項目類型。
  3. 添加 MyClass.hMyClass.cpp 文件到項目中。

4. 構建靜態鏈接庫

構建工程,將會生成一個 .lib 文件(例如 MyLibrary.lib)。

5. 使用靜態鏈接庫

要使用這個靜態鏈接庫,需要在另一個項目中導入它:

// main.cpp
#include <iostream>
#include "MyClass.h"int main() {MyClass myClass;myClass.SayHello();return 0;
}

在你的新項目中,確保以下幾點:

  1. 將生成的 MyLibrary.lib 文件添加到新項目的鏈接器輸入中。
  2. 確保 MyClass.h 頭文件在新項目的包含路徑中。

6、添加靜態庫和頭文件路徑

在新項目中配置靜態庫和頭文件路徑:

  1. 右鍵點擊新項目,選擇“屬性”。
  2. 在左側面板中選擇“C/C++” -> “常規”。
  3. 在“附加包含目錄”中添加靜態庫的頭文件路徑。
  4. 在左側面板中選擇“鏈接器” -> “常規”。
  5. 在“附加庫目錄”中添加靜態庫文件的路徑。
  6. 在左側面板中選擇“鏈接器” -> “輸入”。
  7. 在“附加依賴項”中添加靜態庫文件名(例如 MyLibrary.lib)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37806.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud_Ribbon負載均衡

概述 SpringCloud底層其實是利用了一個名為Ribbon的組件&#xff0c;來實現負載均衡功能的。 源碼 LoadBalancerInterceptor 其中含有intercept方法&#xff0c;攔截用戶的HttpRequest請求&#xff1a; request.getURI() 獲取請求uri&#xff0c;即http://userservice/use…

3D Gaussian Splatting代碼中的Gaussian_Module和Cameras兩個類的代碼解讀

Gaussian_model 討論Gaussian_model這個類&#xff0c;是因為里面包含了三維高斯分布的基本信息&#xff0c;里面定義了各種參量的構建方式、用于優化學習的激活函數、學習率設置方法和高斯點優化過程中的增加與刪除方式及對應優化器的處理方法。這個類定義在scene文件夾中的g…

反激開關電源反饋電路相關參數選型

Vb的電壓正常變化范圍是&#xff1a;0-1V&#xff08;最低0V&#xff0c;由于有穩壓管&#xff0c;最高不會超過1V&#xff09; Vb的電壓越高&#xff0c;則輸出占空比越大&#xff0c;Vb電壓越低&#xff0c;則輸出占空比越小 那么Va的正常變化范圍應該是&#xff1a;1.4-4.…

怎么配置electron-builder

electron-builder 是一個用于 Electron 應用程序打包和發布的工具,它支持 macOS、Windows 和 Linux 平臺。以下是一個清晰且詳細的 electron-builder 配置指南,包括分點表示和歸納,并參考了相關文章中的信息。 一、安裝 electron-builder 首先,你需要在你的 Electron 項目…

云卓SKYDROID-H30——科技改變未來

云卓H30采用高通處理器、搭載安卓嵌入式系統&#xff0c;擁有三個工作頻率&#xff0c;讓圖像更清晰、延遲更低、距離遠、抗干擾性強&#xff0c;支持多種接口&#xff0c;更有10.1寸高清工業級陽光可視屏&#xff0c;防塵耐磨&#xff0c;結構強度高&#xff0c;適用于各種嚴苛…

Python和tkinter單詞游戲

Python和tkinter單詞游戲 數據字典文本文件&#xff0c;文件名為Dictionary.txt&#xff0c;保存編碼格式為&#xff1a;utf-8。文本內容&#xff1a;每行一個 單詞 &#xff0c;單詞和解釋用空格分隔&#xff0c;如 a art.一(個)&#xff1b;每一(個) ability n.能力&#…

springboot實驗報告管理系統-計算機畢業設計源碼10596

目錄 1 緒論 1.1 選題背景與意義 1.2國內外研究現狀 1.3論文結構與章節安排 2系統分析 2.1 可行性分析 2.2 系統流程分析 2.2.1系統開發流程 2.2.2 用戶登錄流程 2.2.3 系統操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 刪除信息流程 2.3 系統功能分析 …

HarmonyOS Next開發學習手冊——單選框 (Radio)

Radio是單選框組件&#xff0c;通常用于提供相應的用戶交互選擇項&#xff0c;同一組的Radio中只有一個可以被選中。具體用法請參考 Radio 。 創建單選框 Radio通過調用接口來創建&#xff0c;接口調用形式如下&#xff1a; Radio(options: {value: string, group: string})…

高考不是終點:如何利用教育資源實現人生躍遷?普魯士教育的利弊,你了解嗎?從科舉到高考,中國教育的變遷!鏈接上層,獲取核心資源的途徑

高考已經結束&#xff0c;這兩天分數將會陸續出來&#xff0c;無論結果好壞&#xff0c;我都希望你明白一些道理。這些道理在學校老師不會教你&#xff0c;但是非常重要。 一、中國的科舉制度 科舉制度是為王朝服務的。 科舉制度是中國古代通過考試選拔官員的制度&#xff0c…

C++類型轉換可調用對象

目錄 C的四種可視性類型轉換 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可調用對象 普通函數 函數指針 仿函數 Lambda表達式 包裝器function bind C的四種可視性類型轉換 C語言中的類型轉換是不安全、不明確的&#xff0c;于是C就出了更…

MQTT QoS 0, 1, 2

目錄 # 開篇 1. 精細MQS TT QoS的行為 1.1 QoS 0: 最多交付一次&#xff08;At Most Once&#xff09; 1.2 QoS 1: 至少交付一次&#xff08;At Least Once&#xff09; 1.3 QoS 2: 只交付一次&#xff08;Exactly Once&#xff09; 1.4 傳輸過程圖示 1.5 總結 2. MQTT…

HTTP協議頭中X-Forwarded-For是能做什么?

X-Forwarded-For和相關幾個頭部的理解 $remote_addr 是nginx與客戶端進行TCP連接過程中&#xff0c;獲得的客戶端真實地址. Remote Address 無法偽造&#xff0c;因為建立 TCP 連接需要三次握手&#xff0c;如果偽造了源 IP&#xff0c;無法建立 TCP 連接&#xff0c;更不會有后…

javascript 的 屬性、方法、事件

使用 javascript 設計一個學生類、&#xff08;屬性&#xff1a;ID、姓名、性別,方法&#xff1a;學習、休息、&#xff0c;事件&#xff1a;上學、放學、上課、下課&#xff09;學校有定時器每1秒鐘觸發一次時鐘事件&#xff0c;每節課45分鐘&#xff0c;課間15分鐘 var Stud…

13. Lammps入門in文件簡介-1

來源&#xff1a; “碼農不會寫詩”公眾號 鏈接&#xff1a;Lammps入門in文件簡介-1 文章目錄 01 in文件簡介02 in文件命令解析規則 書回正文 Lammps通過一次一行地從輸入腳本&#xff08;文本文件&#xff0c;通常稱in文件&#xff09;中讀取命令來執行計算&#xff0c;當輸入…

7-1作業

1.實驗目的&#xff1a;完成字符收發 led.h #ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC,GPIO,UART初始化 void init();//字符數據發送 void set_tt…

Web端登錄頁和注冊頁源碼

前言&#xff1a;登錄頁面是前端開發中最常見的頁面&#xff0c;下面是登錄頁面效果圖和源代碼&#xff0c;CV大法直接拿走。 1、登錄頁面 源代碼&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>登錄</ti…

Django 和 Django REST framework 創建對外 API

1. 環境準備 確保你已經安裝了 Python 和 Django。如果尚未安裝 Django REST framework&#xff0c;通過 pip 安裝它&#xff1a; pip install djangorestframework 2. 創建 Django 項目 如果你還沒有 Django 項目&#xff0c;可以通過以下命令創建&#xff1a; django-ad…

每日復盤-20240701

今日關注&#xff1a; 20240701 六日漲幅最大: ------1--------301182--------- 凱旺科技 五日漲幅最大: ------1--------300977--------- 深圳瑞捷 四日漲幅最大: ------1--------300977--------- 深圳瑞捷 三日漲幅最大: ------1--------300461--------- 田中精機 二日漲幅最…

Lua實現鏈表(面向對象應用)

Lua實現面向對象 面向對象核心三要素Lua面向對象大致原理面向對象示例繼承與多態示例 面向對象核心三要素 1.封裝&#xff1a;對一個事物的抽象為一些屬性和行為動作的集合&#xff0c;封裝將屬性和行為動作&#xff08;操作數據的方法&#xff09;綁定在一起&#xff0c;并隱藏…

快錢支付股東全部股權已被質押!

根據近期工商信息&#xff0c;第三方支付機構快錢支付清算信息有限公司&#xff08;簡稱“快錢支付”&#xff09;實際控股方快錢金融服務&#xff08;上海&#xff09;有限公司&#xff08;簡稱“快錢金融”&#xff09;&#xff0c;作為出質股權標的企業&#xff0c;被出質給…