前言
在编写程序时,或者细心的话,都会发现见过一些后缀名为lib和dll的文件,这些文件其实就是所谓的静态库和动态库。
静态库
静态库在windows平台的后缀名如标题所示为**.lib**,在linux平台则为**.a**。
静态库是在静态编译时由编译器到指定目录寻找并且进行链接的软件库,一旦链接完成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段、数据段等。
动态库
动态库在windows平台的后缀名为标题所示为**.dll**,在linux平台则为**.so**。
动态库是在应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。
二者比较
动态库与静态库在功能上并无太大的区分,同样都可以实现源码或者数据的保护目的。
但是静态库因为是直接链接进程序之中的,所以一旦改变,就涉及到程序的重编译,如果静态库的功能模块变更频繁,就需要重复的去编译程序,而如果是提供给客户,或者开发提供给测试的代码,显然并不具备重编译的能力。
恰恰这个时候就是动态库用的比较多,因为无论静态库还是动态库,使用时都是开放相关的接口出来,由程序去直接调用,因为动态库并非直接链接进程序中,而是在程序运行时动态的去指定目录下寻找并载入内存中,所以即使动态库有需要改变,只要接口是不变的,在使用时只要更换不同版本的库就可以解决这个问题。