网站开发流程三部分,在线电子印章制作,万网是什么,我要找工作 招聘附近文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种#xff1a;静态库#xff08;.a、.lib#xff09;和动态库#xff08;.so、.dll#xff09;。所谓静态、动态是指链接。静态库是将整个库文件都拷… 文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种静态库.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同文件下
静态库与动态库的优缺点
静态库
优点
运行速度比动态库快
缺点
浪费内存空间当多个应用程序依赖同一个静态库在内存中要拷贝多份更新部署发布比较麻烦修改静态库代码不止要重新编译库文件还需要重新编译整个可执行文件
动态库
缺点
运行速度比静态库慢
优点
节省内存空间当多个应用程序依赖同一个动态库在内存中只需要拷贝一份更新部署发布简单修改动态库只需要重新编译库文件即可不需要重新编译可执行文件动态库在运行的时候才被载入可以依靠程序控制库文件的载入时间