动态库和静态库谁快(动态库和静态库的使用)

动态库和静态库谁快(动态库和静态库的使用)目录 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、如何制作一个静态库?

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

编程小号
上一篇 2025-02-17 07:17
下一篇 2025-01-29 07:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/75670.html