【计算机网络】 静态库与动态库
文章目录
- 静态库实践
- 使用方法
- 总结
- 动态库实践
- 使用方法
- 总结
- 静态库与动态库的优缺点
- 静态库
- 优点
- 缺点
- 动态库
- 缺点
- 优点
库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。静态库是将整个库文件都拷贝到可执行文件中了,而动态库只是将索引文件拷贝到可执行文件中,可以通过索引文件找到动态库文件。
静态库实践
使用方法
首先我们用vs创建一个静态库,再创建之后我们发现会自动生成4个文件(两个头文件,两个源文件)

先来看pch.h文件
一进去会给出一些注释

其实意思就是在这个文件中加载头文件和声明函数的
然后framework.h中是定义宏的
pch.cpp里就是对pch.h中声明的函数进行定义
最后那个自己命名的文件就是测试文件
比如我们想创建一个加法函数,那么首先我们在pch.h中声明这个函数

然后在pch.cpp中进行实现

因为库不能执行,所以不能点击本地调试器,我们可以点击生成中的生成解决方案,这样就不会报错了

点击后我们就可以看到生成了一个.lib文件,也会显示出它的路径

可以在这条路径中找到静态库文件

那么我们要怎么使用这个静态库呢?
我们需要再打开一个解决方案,创建一个空项目,然后添加一个源文件,我们想在这个源文件中使用刚才在静态库中添加的函数

在没做任何操作的时候会出现一个未定义标识符的错误,因为不认识这个函数(当前项目里没有这个函数),解决办法就是添加头文件,那么头文件在哪呢,在我们刚才那个项目的路径中可以找到那个pch.h,然后在pch.h中还调用了framework.h

所以将这两个个文件拷贝到当前项目中,然后添加头文件

此时我们可以看到不再报错,但是如果要运行还是不可以,会出现“无法解析的外部符号”的错误,因为这个函数目前只有声明,并没有定义实现,解决办法是添加库依赖
先将刚才生成的库拷贝到当前路径下
这里为了使项目看起来更清晰整洁,我们可以创建两个文件夹,一个用来放头文件,一个用来放库文件

那么这样我们在添加的时候就需要稍微寻找一下路径,这里涉及到绝对路径和相对路径:
- 相对路径:./(当前路径下)或者是…/(当前文件夹向上一层)
- 绝对路径:从盘符开始的路径,比如:E:\20230105\静态库与动态链接库\network_1_01_applyLib
使用:只有当前项目使用的文件,要随着项目的移动一起移动,放到同一个解决方案里,使用相对路径;
操作系统提供的文件,使用绝对路径。
添加库依赖:

最后再加上system(“pause”);,这样就可以运行了

总结
使用步骤:
- 把头文件拷贝到当前项目中,添加头文件依赖
- 把库文件拷贝到当前项目中,添加库文件依赖
动态库实践
使用方法
先创建一个动态链接库文件,与静态库一样,这里也有四个文件

我们在这个文件中写两个函数(为了比较),一个加法函数,一个减法函数
我们在声明减法函数的前面写上_declspec(dllexport),因为只有声明导出,才会在索引文件中生成索引

实现这两个函数

然后我们旋转生成解决方案,可以看到,生成了一个.lib索引文件和一个.dll

我们去对应路径下找到他们,然后拷贝到静态库实践中我们创建的那个测试项目中,当然那两个头文件也需要拷贝过来

如果是静态库,到此为止已经可以正常执行了,但我们在运行的时候发现会出现找不到dll文件的错误,原因是我们需要将dll拷贝到exe同文件下

这样就可以了

我们知道静态库有一个优点,就是在库文件更新时,只需要重新编译库并把库提供给别人,别人不需要重新执行可执行文件就可以执行exe
我们在刚才动态库中的代码修改一下,然后重新生成一下

再将用户的exe同文件下的dll替换就可以,我们点击exe可以发现执行结果已经做出改变

总结
使用步骤:
- 把头文件拷贝到当前项目中,添加头文件依赖
- 把索引文件拷贝到当前项目中,添加索引文件依赖
- 把dll拷贝到exe同文件下
静态库与动态库的优缺点
静态库
优点
运行速度比动态库快
缺点
- 浪费内存空间,当多个应用程序依赖同一个静态库,在内存中要拷贝多份
- 更新部署发布比较麻烦,修改静态库代码,不止要重新编译库文件,还需要重新编译整个可执行文件
动态库
缺点
运行速度比静态库慢
优点
- 节省内存空间,当多个应用程序依赖同一个动态库,在内存中只需要拷贝一份
- 更新部署发布简单,修改动态库,只需要重新编译库文件即可,不需要重新编译可执行文件
- 动态库在运行的时候才被载入,可以依靠程序控制库文件的载入时间
相关文章:
【计算机网络】 静态库与动态库
文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。静态库是将整个库文件都拷…...
web端调用本地摄像头麦克风+WebRTC腾讯云,实现直播功能
目录 关于直播直播流程直播视频格式封装推流和拉流 获取摄像头和麦克风权限navigator.getUserMedia()MediaDevices.getUserMedia() WebRTC腾讯云快直播 关于直播 视频直播技术大全、直播架构、技术原理和实现思路方案整理 直播流程 视频采集端: 1、视频采集&#…...
React笔记(八)Redux
一、安装和配置 React 官方并没有提供对应的状态机插件,因此,我们需要下载第三方的状态机插件 —— Redux。 1、下载Redux 在终端中定位到项目根目录,然后执行以下命令下载 Redux npm i redux 2、创建配置文件 在 React 中,…...
数据库 | 数据库概述、关系型数据库、非关系型数据库
目录: 1.数据库:1.1 数据库的含义1.2 数据库的特点 2.数据表3.数据库管理系统4.数据库系统5.关系型数据库 和 非关系型数据库:5.1 关系型数据库5.2 关系型数据库“优势”5.3 非关系型数据库 6.关系型数据库 和 非关系型数据库 的“区别” 1.数…...
【备战csp-j】 csp常考题目详解(4)
四.数值转换与编码 1. 十进制数 11/128 可用二进制数码序列表示为( ) 。 A.1011/1000000 B.1011/100000000 C.0.001011 D.0.0001011 答案:D 解析:暂时未找到解决方法,以后会解决。 2. 算式(2047)10 - (3FF)16 + …...
linux中常见服务端安装
linux安装服务脚本 1、yum安装 # 通过apt安装yum apt install yum # yum安装软件 yum install pam-devel # yum 卸载 yum remove pam-devel2、rpm安装 # 安装 rpm -i example.rpm #安装 example.rpm 包; rpm -iv example.rpm #安装 example.rpm 包并在安装过程…...
L1-058 6翻了(Python实现) 测试点全过
前言: {\color{Blue}前言:} 前言: 本系列题使用的是,“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度。更新取决于题目的难度,…...
初学Python记
Python这个编程语言的大名当然听说过了呀,这几年特别火,火的一塌涂地。大家可以回忆一下:朋友圈推荐的广告里经常可以看见python的网课广告。 本学期,学校开设了python课程,这几天学习了一下入了一下门,感…...
计算机竞赛 基于深度学习的目标检测算法
文章目录 1 简介2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 1 简介 ǵ…...
sentinel-core
引入依赖<dependencies><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-anno…...
【美团3.18校招真题1】
大厂笔试真题网址:https://codefun2000.com/ 塔子哥刷题网站博客:https://blog.codefun2000.com/ 小美剪彩带 提交网址:https://codefun2000.com/p/P1088 题意:找出区间内不超过k种数字子数组的最大长度 使用双指针的方式&…...
Springboot 实践(14)spring config 配置与运用--手动刷新
前文讲解Spring Cloud zuul 实现了SpringbootAction-One和SpringbootAction-two两个项目的路由切换,正确访问到项目中的资源。这两个项目各自拥有一份application.yml项目配置文件,配置文件中有一部分相同的配置参数,如果涉及到修改…...
MyBatisPlus枚举类最佳实践(非常典型和高效的枚举类写法)
目录 1、MyBatisPlus枚举类最佳实践 2、枚举类的作用及问题 3、MyBatisPlus注解实现枚举最佳实践 4、简单来说 5、下面我们看一个使用上述注解的完整枚举类示例: (1)枚举类: (2)DTO类: 6、根据上面…...
uniapp分包 解决分多个包的问题
1. 分包可以分很多个, 但是在"optimization": { "subPackages": true } 里面只能写一个, 2. 想分多个包 , 在 pages.json 里面 的 subPackages 里面继续加 第三个 第四个即可 3. 保存之后 创建页面就可以看见多个包了...
美国封锁激励中国制造业数字化转型的崛起 | 百能云芯
上海在近日公布了第二批工赋链主培育企业名单,共有15家企业入选。这些被称为“链主”的企业在上海制造业数字化转型的过程中扮演着关键角色,类似于领头大雁,它们是上海制造业的数字化网络中的关键节点。 中新社的报道指出,“数字技…...
鼠标键盘自动化工具pyautogui
安装 pip install pyautogui pip install keyboard获取鼠标实时位置 import pyautogui pyautogui.displayMousePosition()样例代码 # https://pyautogui.readthedocs.org/ # https://github.com/asweigart/pyautogui# 紧急停止,手动将鼠标移动到屏幕的4个角落imp…...
0基础学习VR全景平台篇 第96篇:VR电子楼书
大家好,欢迎观看蛙色VR官方系列课程——VR电子楼书! 作为2021年底全新上线的行业解决方案,是专门针对地产、园区数字化营销的一站式VR解决方案,为行业潜在客户提供优质的7x24小时线上看房体验。 本期教程将通过功能介绍后台操作&…...
【MySQL】数据库的约束
MySQL 数据库的约束 文章目录 MySQL 数据库的约束01 数据库的约束1.1 约束类型1.1.1 NOT NULL1.1.2 UNIQUE1.1.3 DEFAULT1.1.4 PRIMARY KEY1.1.5 FOREIGN KEY1.1.6 CHECK 继上文 MySQL基础(一), MySQL基础(二)&#…...
改变金融贷款市场营销方式 ---- 运营商大数据精准获客
与传统的企业网络营销相比,最常见的是网络推广和硬广告推广。一些企业无法找到可靠准确的数据来源,也无法找到一些未知的总数据。这些数据大多存在持续时间长、准确性差的缺点,企业在将这些数据信息应用于商品在线营销时往往会遇到不足。 在…...
SpringBoot实现分页的四种方式
一 自己封装Page对象实现 博客链接 二 使用sql实现分页 2.1 场景分析 前段传递给给后台什么参数? 当前页码currentPage每页显示条数pageSize 后台给前端返回什么数据? 当前页数据List总记录数totalCount 2.2 前段代码 <template><el-paginationsize-change&q…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
