目录
1、静态库和动态库有什么不同?
1.1、编译时的链接方式不同
2、如何制作库和如何调用库?以Window平台、C++语言、IDE VS2019为例
2.1、如何制作一个静态库?
2.2、如何调用静态库?
2.3、如何制作一个动态库?
2.4、如何调用动态库
2.4.1、隐式调用,也叫静态调用
2.4.2、显示调用 ,也叫动态调用
静态库采用静态链接,动态库采用动态链接。
使用静态库的时候,静态库和调用程序链接打包成了一个可执行文件。所以可执行文件比较大,想要升级静态库的话,就必须重新编译,全量升级。编译完成之后就不再需要静态库,也就是说运行时不需要静态库。
使用动态库的时候,动态库和调用程序不会链接打包在一起。所以可执行文件较小,想要升级动态库的话,只需要替换相应的动态库即可,不需要重新编译,不需要替换整个可执行文件,可实现增量升级。简单来说就是编译时不需要动态库,运行时需要动态库。
1、创建一个空项目
2、编写头文件和源文件

3、以静态库的方式生成
项目右键属性
静态库制作完成
很简单,只需要包含静态库的头文件和链接库路径
链接库的编译指令是:#pragma comment ( lib,"xxx.lib" )

也可以在项目->属性中设置静态库的路径
完成
和制作静态库不同的是
1、选择以动态库的方式生成

2、增加__declspec(dllexport),将动态库函数声明为导出函数

有两种调用动态库的方式:隐式调用和显示调用
2.4.1、隐式调用,也叫静态调用
调用的方式的静态库一样,只需要包含静态库的头文件和链接库路径

注意:动态库的.lib文件和静态库的.lib 文件完全不是一回事,动态库.lib文件主要是帮助调用程序找到动态库的函数地址,而函数实现都在.dll文件里,静态库的函数实现在.lib文件里。
2.4.2、显示调用 ,也叫动态调用
这里需要用到加载、获取动态库函数地址、卸载的函数,包含在Windows.h里

一运行我们发现,获取动态库函数地址失败

原因是函数的名字在动态库里面并不叫"Add",我们用depends工具看一下

函数的名字叫:?Add@@YAHHH@Z,这是因为C++语言函数可以发生重载的缘故,编译器编译的时候在函数名前面和后面增加了一些信息来区别重载。
解决方法有两个。1、动态库使用C语言的编译器 。2、在动态库函数声明前面加一个 extern "C",指示编译器以C语言的方式导出。

版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/54490.html