动态库与静态库
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。
库有两种:静态库(.a、.lib)和动态库(.so、.dll)。
所谓静态、动态是指链接。
动态LIB:按照静态库包装的动态库。按照静态库使用,实际上是动态加载。
普通静态库:XXX.LIB。
普通动态库:XXX.DLL。
动态LIB:XXX.LIB + XXX.DLL
库本质上是已经写好并编译过的程序模块,里面包含一定的软件功能,可以通过链接直接加入到自己的程序中使用。
静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被链接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
常见的库有三种:系统库(操作系统库、开发环境库)、第三方库(其它软件库)、自己开发库(自己开发供多进程共享使用库)。
优缺点
使用库的好处:
- 程序模块化、分工合作/并行开发
- 避免少量改动经常导致大量的重复编译链接,提高编译速度
- 减少代码重复,增加常用基础代码重用
- 使用已有的系统库或者第三方库,提高代码稳定性,减少新开发易引入的软件问题
静态库的优点:
1.链接后的程序完整(相对于动态库)
静态库的缺点:
- 链接后的可执行程序体积大
动态库的优点:
- 可以将最终可执行程序体积缩小
- 多个应用程序内存中共享同一份库文件,节省资源
- 动态更新程序功能。使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
动态库的缺点:
1.可执行程序和动态库分开,动态库异常或者不存在时,可执行程序只有在执行过程中才会发现异常。