一、C++库
(1).C++中什么是库:
库是写好的、成熟的、可以复用的代码。现实中不可能每个人都从零开始写代码,都要依赖很多底层库。本质上来说库是一种可执行代码。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。静态库和动态库的区别在于链接阶段如何处理库。
二、静态库
(1).概念
静态链接库在链接时,编译器会将 .obj 文件和 .lib 文件组织成一个 .exe 文件,程序运行时,将全部数据加载到内存。如果程序体积较大,功能较为复杂,那么加载到内存中的时间就会比较长,最直接的一个例子就是双击打开一个软件,要很久才能看到界面。这是静态链接库的一个弊端。
(2).概念总体静态链接库的优缺点
优点:
- 编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容
- 但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译
缺点:
- 静态库对函数库的链接是放在编译时期完成的。
- 程序在运行时与函数库再无瓜葛,移植方便。
- 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
三、动态库
(1).概念
动态库在编译的时候,在程序里只有一个“指向”的位置而已,也就是说当可执行文件需要使用到函数库的机制时,程序才会去读取函数库来使用;也就是说可执行文件无法单独运行。这样从产品功能升级角度方便升级,只要替换对应动态库即可,不必重新编译整个可执行文件。
优点:
- 可实现进程间资源共享
- 可以更新、部署、发布简单
- 可以控制何时加载动态库
缺点:
- 加载速度比静态库慢
- 发布程序时需要提供依赖的动态库