动态编译
通过源码编译的过程中执行./configure && make && make install
,在默认情况下都是进行动态编译。
Linux的可执行文件在链接过程中可以通过使用动态链接,在可执行文件加载过程中链接第三方的SO库文件,这种使用动态链接的可执行文件编译过程称之为动态编译。
优点:
- 编译速度快;
- 编译出来的文件体积小;
缺点: - 如果系统缺少相关SO库就会无法执行。
静态编译
通过源码编译的过程中执行./configure
时增加参数CFLAGS="-static"
,即./configure CFLAGS="-static" && make && make install
,即可进行静态编译。
Linux可真行文件静态编译会在链接过程中链接所有用到的第三方.a库文件,哪怕只用到第三方库中其中几个函数,也会将整个第三方库链接过来。
优点:
- 执行过程中不需要依赖任何SO库。
缺点: - 编译速度慢;
- 编译出来的文件体积大;