当前位置: 首页 > news >正文

【计算机网络】 静态库与动态库

文章目录

      • 静态库实践
        • 使用方法
        • 总结
      • 动态库实践
        • 使用方法
        • 总结
      • 静态库与动态库的优缺点
        • 静态库
          • 优点
          • 缺点
        • 动态库
          • 缺点
          • 优点

库有两种:静态库(.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”);,这样就可以运行了

在这里插入图片描述

总结

使用步骤:

  1. 把头文件拷贝到当前项目中,添加头文件依赖
  2. 把库文件拷贝到当前项目中,添加库文件依赖

动态库实践

使用方法

先创建一个动态链接库文件,与静态库一样,这里也有四个文件

在这里插入图片描述

我们在这个文件中写两个函数(为了比较),一个加法函数,一个减法函数

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

在这里插入图片描述

实现这两个函数

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

这样就可以了

在这里插入图片描述

我们知道静态库有一个优点,就是在库文件更新时,只需要重新编译库并把库提供给别人,别人不需要重新执行可执行文件就可以执行exe

我们在刚才动态库中的代码修改一下,然后重新生成一下
在这里插入图片描述

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

在这里插入图片描述

总结

使用步骤:

  1. 把头文件拷贝到当前项目中,添加头文件依赖
  2. 把索引文件拷贝到当前项目中,添加索引文件依赖
  3. 把dll拷贝到exe同文件下

静态库与动态库的优缺点

静态库

优点

运行速度比动态库快

缺点
  1. 浪费内存空间,当多个应用程序依赖同一个静态库,在内存中要拷贝多份
  2. 更新部署发布比较麻烦,修改静态库代码,不止要重新编译库文件,还需要重新编译整个可执行文件

动态库

缺点

运行速度比静态库慢

优点
  1. 节省内存空间,当多个应用程序依赖同一个动态库,在内存中只需要拷贝一份
  2. 更新部署发布简单,修改动态库,只需要重新编译库文件即可,不需要重新编译可执行文件
  3. 动态库在运行的时候才被载入,可以依靠程序控制库文件的载入时间

相关文章:

【计算机网络】 静态库与动态库

文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种:静态库(.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 简介 &#x1f5…...

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】

大厂笔试真题网址&#xff1a;https://codefun2000.com/ 塔子哥刷题网站博客&#xff1a;https://blog.codefun2000.com/ 小美剪彩带 提交网址&#xff1a;https://codefun2000.com/p/P1088 题意&#xff1a;找出区间内不超过k种数字子数组的最大长度 使用双指针的方式&…...

Springboot 实践(14)spring config 配置与运用--手动刷新

前文讲解Spring Cloud zuul 实现了SpringbootAction-One和SpringbootAction-two两个项目的路由切换&#xff0c;正确访问到项目中的资源。这两个项目各自拥有一份application.yml项目配置文件&#xff0c;配置文件中有一部分相同的配置参数&#xff0c;如果涉及到修改&#xf…...

MyBatisPlus枚举类最佳实践(非常典型和高效的枚举类写法)

目录 1、MyBatisPlus枚举类最佳实践 2、枚举类的作用及问题 3、MyBatisPlus注解实现枚举最佳实践 4、简单来说 5、下面我们看一个使用上述注解的完整枚举类示例: &#xff08;1&#xff09;枚举类&#xff1a; &#xff08;2&#xff09;DTO类&#xff1a; 6、根据上面…...

uniapp分包 解决分多个包的问题

1. 分包可以分很多个, 但是在"optimization": { "subPackages": true } 里面只能写一个, 2. 想分多个包 , 在 pages.json 里面 的 subPackages 里面继续加 第三个 第四个即可 3. 保存之后 创建页面就可以看见多个包了...

美国封锁激励中国制造业数字化转型的崛起 | 百能云芯

上海在近日公布了第二批工赋链主培育企业名单&#xff0c;共有15家企业入选。这些被称为“链主”的企业在上海制造业数字化转型的过程中扮演着关键角色&#xff0c;类似于领头大雁&#xff0c;它们是上海制造业的数字化网络中的关键节点。 中新社的报道指出&#xff0c;“数字技…...

鼠标键盘自动化工具pyautogui

安装 pip install pyautogui pip install keyboard获取鼠标实时位置 import pyautogui pyautogui.displayMousePosition()样例代码 # https://pyautogui.readthedocs.org/ # https://github.com/asweigart/pyautogui# 紧急停止&#xff0c;手动将鼠标移动到屏幕的4个角落imp…...

0基础学习VR全景平台篇 第96篇:VR电子楼书

大家好&#xff0c;欢迎观看蛙色VR官方系列课程——VR电子楼书&#xff01; 作为2021年底全新上线的行业解决方案&#xff0c;是专门针对地产、园区数字化营销的一站式VR解决方案&#xff0c;为行业潜在客户提供优质的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基础&#xff08;一&#xff09;&#xff0c; MySQL基础&#xff08;二&#xff09;&#…...

改变金融贷款市场营销方式 ---- 运营商大数据精准获客

与传统的企业网络营销相比&#xff0c;最常见的是网络推广和硬广告推广。一些企业无法找到可靠准确的数据来源&#xff0c;也无法找到一些未知的总数据。这些数据大多存在持续时间长、准确性差的缺点&#xff0c;企业在将这些数据信息应用于商品在线营销时往往会遇到不足。 在…...

SpringBoot实现分页的四种方式

一 自己封装Page对象实现 博客链接 二 使用sql实现分页 2.1 场景分析 前段传递给给后台什么参数? 当前页码currentPage每页显示条数pageSize 后台给前端返回什么数据? 当前页数据List总记录数totalCount 2.2 前段代码 <template><el-paginationsize-change&q…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...