服务器应用,为了尽可能减小环境的影响,避免开发和线上环境的差别,以及同机器其他应用的影响,即使用动态库我们也倾向于把所有用到的库打包。(最新的思路是把整个文件系统打包,如Docker)这是前提。
那么静态链接的优点是:
1. 省空间:linker只会复制你用到的objects。
2. 打包简单。
实际上动态库原名就是shared objects,如果没准备share,用动态库实在没什么好处。除非:
3. 应用是多executable,多进程结构,那么动态库既省内存又省磁盘空间。
4. 应用要动态加载进程内插件:进程空间内多份静态库烦死你。