一、库基础知识
已经写好并且可以进行复用的代码,按照链接方式可分为两种 :动态库和静态库。他们在链接时起作用。
静态库:使用静态链接方式,库中的所有数据代码都将拷贝到调用程序的代码空间中去。也就是说你在哪调用了库中的函数, 它会将被调用的函数的的数据代码全部拷贝到该位置。在链接阶段就直接打包进可执行文件中。
动态库:用动态链接方式,在链接时dll并不拷贝入最终生成的.exe。在程序运行需要调用dll时,才会加载。
总之一句话:动态链接相比于静态链接,生成的可执行文件要小,但是运行时调用库所花费的时间要长。
(好了,让我真刀真枪的干上一场吧哈哈哈)
二、VS2015使用动态库简单示例
1.打开V2015 -> 建立win32项目
2.点击下一步
3.选择DLL->选择导出符号(方便初学者使用) -> 选择下一步(当然附加选项可以选上 导出符号 ,会多一个接口,一般我是自己写接口的)
4.开始编写一个简单的库例程
我书写的是一个HELLO函数
1.在DLL_Project.cpp中添加如下函数内容
2.在DLL_Project.h中添加如下函数声明
3.点击生成解决按方案
出现如下文件,拷贝复制到你需要这个库的工程的可执行文文件同级目录下
4.添加.lib,点开工程属性->链接器->常规->附加库目录->浏览选择你.lib的路径(当然也可以添加相对路径,移植性更高,这里使用绝对路径)
5.点开 链接器 下的 输入 选项 -> 附加依赖项 -> 填写你的.lib全名
6.调用运行啦
运行结果
到这你是不是觉得结束了?那你就太天真了,就没有想过为什么我创建一个DLL工程,为啥会出现一个.lib嘛
哈哈哈哈,好好解释下
静态库:在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件
动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。在vs中新建生成动态库的工程,编译成功后,产生一个.lib文件和一个.dll文件
静态库中的lib:该LIB包含函数代码本身(即包括函数的索引,也包括实现),在编译时直接将代码加入程序当中
动态库中的lib:该LIB包含了函数所在的DLL文件和文件中函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供
总之,lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
参考https://blog.csdn.net/qq_17239003/article/details/78482145
特此鸣谢