什么是静态库、动态库
静态库和动态库认识
静态库:编译器将数据和函数编译为而二进制文件(.lib),在编译链接可执行文件(.exe)时,编译器从静态库中复制这些函数和数据,并把他们和应用程序的其他模块结合起来,创建最终的可执行文件(.exe),当产品发布时只需要.exe即可
动态库:DLL(Dynamic Link Library)称之为动态链接库,动态库一般包含引入库(.lib,非静态库)和.dll文件,引入库包含导出的函数和变量的符号名,.dll包含实际的函数和数据。dll中包含着程序中函数的实现,在程序调用函数时,首先载入dll,获取函数地址,然后调用,这样呢就会让程序在运行之初加载不必要的dll代码
静态库
优点
- 代码装载速度快,执行速度略比动态链接库快
- 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题
缺点
- 容易造成资源浪费,资源对于程序而言无比重要
动态库
优点
- dll体积小更加节省内存
- DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;
- 不同语言可按照约定调用同一个dll
- 可用于大型开发,耦合小
- 节约磁盘空间:当应用程序使用动态链接时,多个应用程序可以共享磁盘上单个DLL副本。相比之下,当应用程序使用静态链接库时,每个应用程序要将库代码作为独立的副本链接到可执行镜像中。
缺点
有优点当然也会有缺点
- 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。
- 速度比静态库慢
动态库的使用(visual studio)
- 头文件路径:项目属性-》C/C+±》常规-》附加包含目录
- 动态库路径:项目属性-》链接器-》常规-》附加库目录
- 动态库名:项目属性-》链接器-》输入-》附加依赖项
一般而言更多的使用动态库
- 更容易扩展程序,对于增量跟新而言更合适
- 节省内存
- 更好的解决应用程序本地化问题