库是写好的现有的,成熟的,可以复用的代码。现实中每个程序员都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。
库有两种:静态库(.a,.lib)和动态库(.so,.all)。
所谓静态,动态是指链接。
回顾一下,将一整个程序编译成可执行程序的步骤:
。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。
动态库特点总结:
动态库的设置与静态库的设置一样。
动态库的使用与静态库的使用基本相同。这里不再赘述。
二者的不同点在于代码被载入的时刻不同。