静态库和动态库

目录

1、静态库和动态库有什么不同?

1.1、编译时的链接方式不同

2、如何制作库和如何调用库?以Window平台、C++语言、IDE VS2019为例

2.1、如何制作一个静态库?

2.2、如何调用静态库?

2.3、如何制作一个动态库?

2.4、如何调用动态库

2.4.1、隐式调用,也叫静态调用

2.4.2、显示调用 ,也叫动态调用


1、静态库和动态库有什么不同?

1.1、编译时的链接方式不同

静态库采用静态链接,动态库采用动态链接。

使用静态库的时候,静态库和调用程序链接打包成了一个可执行文件。所以可执行文件比较大,想要升级静态库的话,就必须重新编译,全量升级。编译完成之后就不再需要静态库,也就是说运行时不需要静态库。

使用动态库的时候,动态库和调用程序不会链接打包在一起。所以可执行文件较小,想要升级动态库的话,只需要替换相应的动态库即可,不需要重新编译,不需要替换整个可执行文件,可实现增量升级。简单来说就是编译时不需要动态库,运行时需要动态库。

2、如何制作库和如何调用库?以Window平台、C++语言、IDE VS2019为例

2.1、如何制作一个静态库?

1、创建一个空项目

 2、编写头文件和源文件

3、以静态库的方式生成

项目右键属性

静态库制作完成

2.2、如何调用静态库?

很简单,只需要包含静态库的头文件和链接库路径

链接库的编译指令是:#pragma comment ( lib,"xxx.lib" )

也可以在项目->属性中设置静态库的路径

 完成

2.3、如何制作一个动态库?

和制作静态库不同的是

1、选择以动态库的方式生成

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

2.4、如何调用动态库

有两种调用动态库的方式:隐式调用和显示调用

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语言的方式导出。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值