理解
将一些公用函数制作成函数库(目标文件级别,非源码级别),供其它程序使用,函数库分为静态库.a和动态库.so
静态库在程序编译时会被链接到目标代码中,程序运行时不再需要该静态库。
动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入。这样我们可以通过更改动态库,动态的改变程序的某些功能。
编译和链接过程
编译-->产生中间文件:.o-->链接-->产生目标文件:.a/.so/.exe等
静态链接
将项目a的代码打包成目标文件a.a,通过连接器链接a.a文件到b项目(即b项目包含了所有a项目中的函数,变量等),实现静态连接,生成可执行文件
和golang类比:a项目就像是golang的runtime代码,b项目就像是用户代码,静态连接就是整合代码到一个可执行程序
动态链接
将项目a的代码打包成目标文件a.so,通过连接器链接a.so文件到b项目(b项目只包含了a项目的.h抽象定义),生产目标可执行文件,需要依赖外部so
和golang类比:a项目就像是golang的plugin代码,b项目就像是用户代码,运行时再加载
参考:
https://blog.csdn.net/weixin_42623551/article/details/121956719
https://blog.csdn.net/m0_37844072/article/details/112857797
http://reborncodinglife.com/2018/04/27/how-to-create-static-lib-in-golang/
http://reborncodinglife.com/2018/04/29/how-to-create-dynamic-lib-in-golang/