静态库是在编译阶段和可执行文件打包链接在一起的,它可以看成是中间文件的简单集合,保留了符号,只有在静态链接的过程中,才会真正地做地址分配和重定位。

而动态库在编译阶段,它的代码并不会被合并进可执行文件中,在运行时才会被加载进内存,它被加载进内存的地址是不固定的,所以每次加载完成之后,才能为它的符号分配真实的内存地址,然后再把地址回填到引用它的GOT中。动态库的一个优点是可以在多个进程间共享,从而可以减少内存的重复。

内容来自极客时间