一.什么是库,库有什么用
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。
二.静态库
我们所说的静态和动态指的是链接。这类库在编译的时候会直接整合到目标程序中。这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容。
静态库的缺点:
1.浪费资源和空间。因为所有相关的目标文件与涉及到的函数库都会被链接成为一个可执行文件。
2.当更改了库的代码后,需要可执行文件重新编译。也就是说静态库会对程序的更新,部署和发布带来麻烦。
Windows环境下静态库的实现:
1.使用静态库需要两个文件,lib文件和头文件
2.添加库依赖
3.添加头文件
4.调用函数
三.动态库
为了解决静态库所带来的问题,我们引入了动态库。动态库在编译时期不会被链接到目标代码中,而是在程序运行的时候才被载入。不同的应用程序如果调用相同的库,那么内存中只需要有一份共享库的实例即可,规避了空间的浪费问题。同时因为是在程序运行时被载入的,也解决了程序的更新问题,不需要重新编译。
Windows环境下动态库的实现:
//1.拷贝文件:要拷贝3个文件,lib和头文件和dll文件.注意:添加头文件时要添加导出声明_declspec(dllexport)注意dll文件必需要和exe文件放在一起
//2.添加库依赖:
//3.添加头文件
//4.调用函数。
四.区别
主要在于代码被载入的时刻不同。静态库是在编译链接期被链接到可执行文件中,运行时不在需要该静态库,因此体积比较大。
动态库是在程序运行时才被载入,因此程序运行时候依赖动态库,体积比较小。
/动态库是为了解决静态库的缺点而产生的。