所谓静态库,就是静态编译时由编译器到指定目录寻找并且进行链接,一旦链接完成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段,数据段等。所谓动态库,就是应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。
win32平台下,静态库后缀为.lib,动态库为.dll。
linux平台下,静态库后缀为.a,动态库为.so.
从本质上来讲,一段程序编译出来的静态库和动态库,在功能上是没有区别的。
相对于动态库,静态库的优点是在于直接被链接进可执行程序中,之后,该可执行程序就不再依赖于运行环境的设置了。
而动态库的优点在于,用户甚至可以在程序运行时随时替换动态库,这就构成了动态插件系统的基础。