lib庫和dll庫的介紹和使用

lib(靜態庫)

  1. 靜態庫定義.lib文件是靜態庫文件,包含了在編譯時被鏈接到目標程序的代碼。使用靜態庫時,庫的代碼會被復制到最終生成的可執行文件中。
  2. 優點
    • 性能:由于庫代碼在編譯時就被集成到可執行文件中,所以在運行時不需要加載外部文件,通常有更好的性能。
    • 分發方便:無需在分發應用程序時包含額外的庫文件,因為所有代碼都已包含在可執行文件中。
  3. 缺點
    • 占用空間:由于每個使用靜態庫的可執行文件都包含了庫的代碼,所以會導致生成的可執行文件較大。
    • 更新不便:如果庫代碼需要更新,則必須重新編譯每個使用該庫的應用程序。

dll(動態庫)

  1. 動態庫定義.dll文件是動態鏈接庫文件,包含了在運行時被加載的代碼。使用動態庫時,庫的代碼在程序運行時才被加載,并且可以被多個程序共享使用。
  2. 優點
    • 節省內存:多個程序可以共享同一個動態庫實例,節省內存。
    • 易于更新:更新動態庫時,只需要替換舊的.dll文件,而無需重新編譯依賴該庫的所有程序。
  3. 缺點
    • 依賴性:應用程序在運行時必須能夠找到并加載所需的動態庫文件,否則會報錯。
    • 加載開銷:在程序運行時加載庫文件會增加一些開銷。

使用場景

  • 靜態庫適用于那些不經常更新,并且不需要被多個程序共享的代碼模塊。
  • 動態庫則適用于需要被多個程序共享,并且可能需要頻繁更新的代碼模塊。

在VS2022中的使用

  • 創建靜態庫:在VS2022中,可以通過選擇“靜態庫(.lib)”項目類型來創建靜態庫。編譯后會生成一個.lib文件和相關的頭文件。
  • 創建動態庫:同樣,可以通過選擇“動態鏈接庫(.dll)”項目類型來創建動態庫。編譯后會生成一個.dll文件以及一個與其對應的.lib文件(用于鏈接時使用)和頭文件。

小結

  • lib文件主要用于靜態鏈接,在編譯時合并到可執行文件中。
  • dll文件用于動態鏈接,在運行時加載,支持代碼共享和動態更新。

靜態庫中的lib

  • 包含函數定義:靜態庫(.lib)文件包含了所有需要的函數定義和實現。鏈接時,編譯器會將這些函數的代碼直接復制到目標可執行文件中。這意味著生成的可執行文件包含了庫中所有用到的代碼。

動態庫中的lib

  • 不包含函數定義:動態庫(.dll)的lib文件(有時稱為“導入庫”)不包含函數的實際實現代碼。相反,它包含了動態庫中導出的函數的符號和地址信息,用于在鏈接時告訴編譯器這些函數在動態庫中實際存在。這種lib文件本質上是一個指向.dll文件中函數實現的“指針”。

總結

  • 靜態庫的.lib文件:包含了所有函數的完整實現。
  • 動態庫的.lib文件:不包含函數實現,僅包含函數的符號信息,用于鏈接時指向對應的.dll文件。

在解決方案中,一個DLL工程中和一個Lib工程,DLL工程調用Lib工程需要添加附加依賴項附加庫目錄

在這里插入圖片描述


在這里插入圖片描述

如果是在一個解決方案(solution)下,在DLL中可以引用Lib工程,這樣就不需要添加附加依賴項和附加依賴庫了,如下圖:

在這里插入圖片描述

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

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

相關文章

分布式架構與分布式理論

文章目錄 分布式架構什么是分布式系統分布式系統特性分布式系統面臨的問題 分布式理論數據一致性CAP理論BASE理論 分布式架構 什么是分布式系統 分布式系統是一個硬件或軟件組件分布在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。 所謂分…

Vue的APP實現下載文件功能,并將文件保存到手機中

Vue的APP實現下載文件功能,并將文件保存到手機中 文字說明后臺核心代碼前臺核心代碼運行截圖項目鏈接 文字說明 本文介紹Vue實現的APP,將文件下載并保存到手機中,為系統提供導出功能;同時支持導入,即選擇本地的文件后&…

Ubuntu18.04 文件管理器無法打開的解決方法

問題:打開Ubuntu虛擬機發現文件管理器無法打開,一直在轉圈圈 在終端中輸入 nautilus 顯示如下信息 nautilus: symbol lookup error: /usr/lib/x86_64-linux-gnu/tracker-2.0/libtracker-data.so.0: undefined symbol: sqlite3_bind_pointer 解決措施&#xff1a…

LabVIEW 反向工程的實現與法律地位

什么是LabVIEW反向工程? 反向工程是指從現有的應用程序或軟件中推導出其設計、架構、代碼等信息的過程。對于LabVIEW而言,反向工程涉及從現有的VI(虛擬儀器)文件、項目或應用程序中提取出設計思路、功能模塊、算法實現等。 LabV…

Spring Boot整合Jasypt 庫實現配置文件和數據庫字段敏感數據的加解密

😄 19年之后由于某些原因斷更了三年,23年重新揚帆起航,推出更多優質博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有堅忍不拔之志 🎐 個人CSND主頁——Mi…

代碼隨想錄第二十九天打卡| 491.遞增子序列,46.全排列,47.全排列 II

491.遞增子序列 本題和大家剛做過的 90.子集II 非常像,但又很不一樣,很容易掉坑里。 代碼隨想錄 視頻講解:回溯算法精講,樹層去重與樹枝去重 | LeetCode:491.遞增子序列_嗶哩嗶哩_bilibili class Solution { public:…

好用軟件推薦

軟件功能相關介紹地址FastStone截圖(長截圖、定時截圖等)CSDNhttps://www.faststone.org/FSCaptureDownload.htmQuicker快捷訪問https://getquicker.net/https://getquicker.net/

大數據學習問題記錄

問題記錄 node1突然無法連接finalshell node1突然無法連接finalshell 今天我打開虛擬機和finalshell的時候,發現我的node1連接不上finalshell,但是node2、node3依舊可以鏈接,我在網上找了很多方法,但是是關于全部虛擬機連接不上finalshell&a…

統一返回響應

前言 我們為什么要設置統一返回響應 提高代碼的可維護性:通過統一返回請求的格式,可以使代碼更加清晰和易于維護,減少重復的代碼,提高代碼質量。 便于調試和測試:統一的返回格式使得在調試和測試時更為簡單&#xff…

大模型時代,是 Infra 的春天還是冬天?

Highlights 大模型時代元年感悟 Scaling Laws 是大模型時代的摩爾定律,是最值得研究的方向 LLM 發展的三個階段: 算法瓶頸 -> 數據瓶頸 -> Infra 瓶頸 為什么 GPT 一枝獨秀, BERT、T5 日落西山? 大模型時代,是大部分 Infra 人的冬天,少部分 Infra 人的春天(算法研…

算法金 | 一文讀懂K均值(K-Means)聚類算法

?大俠幸會,在下全網同名[算法金] 0 基礎轉 AI 上岸,多個算法賽 Top [日更萬日,讓更多人享受智能樂趣] 1. 引言 數據分析中聚類算法的作用 在數據分析中,聚類算法用于發現數據集中的固有分組,通過將相似對象聚集在一…

Qt——前言

一、Qt介紹 ? **Qt技術特指用來桌面應用開發;**客戶端開發的重要任務就是編寫和用戶交互的界面;而與用戶交互的界面有兩種典型風格,1.命令行界面/終端界面,TUI;2.圖形化界面,GUI; ? Qt就是用…

統一響應,自定義校驗器,自定義異常,統一異常處理器

文章目錄 1.基本準備(構建一個SpringBoot模塊)1.在A_universal_solution模塊下創建新的子模塊unified-processing2.pom.xml引入基本依賴3.編寫springboot啟動類4.啟動測試 2.統一響應處理1.首先定義一個響應枚舉類 RespBeanEnum.java 每個枚舉對象都有co…

信息學奧賽初賽天天練-20-完善程序-vector數組參數引用傳遞、二分中值與二分邊界應用的深度解析

PDF文檔公眾號回復關鍵字:20240605 1 2023 CSP-J 完善程序1 完善程序(單選題,每小題 3 分,共計 30 分) 原有長度為 n1,公差為1等升數列,將數列輸到程序的數組時移除了一個元素,導致長度為 n 的開序數組…

云原生架構案例分析_5.某體育用品公司云原生架構的業務中臺構建

1.背景和挑戰 某體育用品公司作為中國領先的體育用品企業之一,在2016年,某體育用品公司啟動集團第三次戰略升級,打造以消費者體驗為核心的“3”(“互聯網”、“體育”和“產品”)的戰略目標,積極擁抱云計算…

NeuralForecast TokenEmbedding 一維卷積 (Conv1d) 與矩陣乘法

NeuralForecast TokenEmbedding 一維卷積 (Conv1d) 與矩陣乘法 flyfish TokenEmbedding中使用了一維卷積 (Conv1d) TokenEmbedding 源碼分析 在源碼的基礎上增加調用示例 下面會分析這段代碼 import torch import torch.nn as nn class TokenEmbedding(nn.Module):def __i…

C++模板類與Java泛型類的實戰應用及對比分析

C模板類和Java泛型類都是用于實現代碼重用和類型安全性的重要工具,但它們在實現方式和應用上有一些明顯的區別。下面,我將先分別介紹它們的實戰應用,然后進行對比分析。 C模板類的實戰應用 C模板類允許你定義一種通用的類,其中類…

SEO 與 PPC 之間的區別

按點擊付費 (PPC): PPC 是一種網絡營銷技術,廣告商在每次點擊廣告時向網站支付一定金額,廣告商只為符合條件的點擊付費。Google 廣告、Bing 和 Yahoo 廣告基于按點擊付費的概念。PPC是用于在搜索引擎首頁上列出的最快方…

【前端】響應式布局筆記——rem

三、rem 指相對于根元素的字體大小的單位。 根字體大小通常設置為10px,方便換算。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

鴻蒙開發接口安全:【@system.cipher (加密算法)】

加密算法 說明&#xff1a; 本模塊首批接口從API version 3開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import cipher from system.ciphercipher.rsa rsa(Object): void RSA 算法加解密。 系統能力&#xff1a; SystemCapabil…