在linux系统里,静态链接(.a)文件是通过将被链接的库文件拷贝一份的方法,提供给应用程序使用的。应用程序在编译的时候,静态库的源文件会被拷贝一份放到应用程序里,因此如果库升级之后,需要将应用程序重新编译。同时如果多个应用程序使用同一个静态库,那么内存中会存在这个静态库文件的多个副本。
动态链接(.so)文件是将库文件直接放到内存中,如果应用程序需要使用,到执行的时候才会去内存中读取动态库文件,如果库升级之后,应用程序无需重新编译,会直接切换到动态库最新的版本。
在两种连接方式的选择方面,如果从节省内存,节省编译时间的角度考虑,应该使用动态库。但是在实际情况中不可以在没有经过测试的情况下直接将库升级,因为库升级有可能会导致应用程序不可用的情况,项目升级的原则是必须要保证原有正常功能不受影响。所以一般在项目里还是采用静态库的方式,因为这样不会产生由于库升级导致的应用程序不可用的问题。