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

文章目录

库有两种:静态库(.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. 动态库在运行的时候才被载入,可以依靠程序控制库文件的载入时间
相关推荐
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
UestcXiye4 小时前
《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项
c++·计算机网络·ip·tcp
不爱学习的YY酱5 小时前
【计网不挂科】计算机网络第一章< 概述 >习题库(含答案)
java·数据库·计算机网络
ZachOn1y7 小时前
计算机网络:运输层 —— 运输层端口号
网络协议·tcp/ip·计算机网络·udp·tcp·端口号
QQ_7781329747 小时前
信息收集、漏洞扫描、漏洞利用、权限提升、数据泄露
网络·计算机网络
java_heartLake10 小时前
计算机网络之网络层
网络·计算机网络
律队i10 小时前
【计算机网络】基础知识,常识应用知识
网络·计算机网络
UestcXiye13 小时前
《TCP/IP网络编程》学习笔记 | Chapter 10:多进程服务器端
c++·计算机网络·网络编程·tcp
java_heartLake15 小时前
计算机网络之传输层
网络·计算机网络
安全系统学习18 小时前
网络安全之SQLMAP _DNS注入配置方法
网络·计算机网络·安全·web安全·网络安全