• 静态链接函数重复率高,占用空间大
  • 静态链接更新部署和发布都会有浪费

要解决上面的问题,最好的方法就是将程序的模块分割开来,形成独立的文件,而不是将他们静态的链接到一起,也就是将链接的过程推迟到运行时进行,也就是动态链接的基本思想

同时这种方法还有额外的好处:使得插件的设计称为可能。第三方通过按照开发者提供的接口编写符合要求的动态链接文件,使得程序能够在运行时动态地载入各种模块,实现功能拓展

此外还能够提高软件在不同机器上的兼容性,这都是静态链接做不到的事情。但是,一旦接口发生了变动,则会产生灾难性的后果,这就是动态链接的缺点

在 linux 中,ELF 动态链接文件被称为 动态共享对象 ,在 windows 中被称为 动态链接库