上世纪90年代,当我第一次开始使用MFC时,我曾经动态链接我的应用程序并附带了相关的MFC DLL。这给我带来了一些问题(DLL地狱!),我改用静态链接-不仅是MFC,而且是CRT和ATL。除了较大的EXE文件外,静态链接根本不会给我带来任何问题-那么,其他人是否有任何不利之处?是否有充分的理由再次访问动态链接?如今,我的应用主要是STL / Boost FWIW。
最佳答案
有一些缺点:
更大的exe大小(尤其是如果您附带多个exe,则更大)
使用依赖或假定动态链接的其他DLL时出现问题(例如:您无法将其作为静态库获得的第三方DLL)
具有独立静态链接(没有跨模块分配/取消分配)的DLL之间的不同c运行时间
无法为共享组件提供自动服务(无法让第三方模块供应商更新其代码来解决问题,而无需重新编译和更新您的应用程序)
我们为Windows应用程序执行静态链接,主要是因为它允许进行xcopy部署,这是无法以有效的方式安装或依赖SxS DLL的方式进行部署的,因为该过程和机制没有得到很好的文档记录或易于删除。如果您在安装目录中使用本地DLL,将可以正常工作,但它不受很好的支持。无法不通过远程系统上的MSI轻松进行远程安装是我们不使用动态链接的主要原因,但是(如您所指出的)静态链接还有很多其他好处。每个都有利弊;希望这有助于列举他们。
关于c++ - 静态或动态链接CRT,MFC,ATL等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17593444/