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.mzph.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…