动态链接和静态链接的区别
纯自己理解 有任何不对欢迎改正
先提问题 静态链接和动态链接是什么?
我们用的stdio.h是动态库还是静态库?
为什么要有动态链接?
其实在很久之前没有动态链接 每个技术的提出都是为了解决一系列问题
假如有2个文件同时引用了一个库 这个库是静态库 而静态库(c.o)里面在linux其实就是可重定位文件
a.c b.c
静态链接就是吧这个库里面的全部文件都链接成为一个目标文件 然后再执行也就是
为什么会这样分布呢首先静态链接是直接将c.o像拼拼图一样直接拼成一个整体 而动态链接则是共享的方式存到物理内存上就是 只有在物理内存上有就能运行
那么区别就是静态是直接将c.o直接拼成一个整体 而动态则不是是在运行的时候发现这个符号没有 那么我就把这个库放入进去
可能大家会说不是还有lib文件吗那个是因为我得告诉他我要用符号
这样我编译并不会出错 但是我一旦运行就会出错了
所以说这个是运行时候才会出问题编译和链接不会报错 所以动态库就可以说是运行时库 只有在运行的时候才会导入到一个特有的虚拟地址空间上特有的段上这个过程也叫装载
由于系统是页映射 这样如果有重复的完全可以不用转载到内存上 只需要加载一次就可以了
参照 阿发你好 的视频