为什么在编译程序的时候会出现“无法启动程序,因为计算机中丢失了mfc120d.dll,尝试重新安装程序以解决此问题”

在正常Windows的环境下,我们用Visual Studio编译程序时,系统默认去C盘中System32目录下寻找对应的CRT运行库。这也便是动态链接的思想,在程序运行时去链接指定的dll文件,但由于Windows版本的差异,程序不一定能够链接到指定的dll文件,那么就会出现如下图所示的错误:
为什么在编译程序的时候会出现“无法启动程序,因为计算机中丢失了mfc120d.dll,尝试重新安装程序以解决此问题”
对于如上图所示的错误,如果我们去下载对应的dll文件并拷贝到工程文件的目录下,那么再次编译程序时又会出现缺失另外一个dll文件的错误(因为System32目录下有上百个dll文件),这明显不是解决问题的思路与方案。此时我们应该想一想动态库和静态库间的区别:

静态库:一般是以.lib和.a结尾的文件,这类库在程序编译时便直接整合到目标程序中,那么以静态链接的方式编译生成的可执行程序便能独立运行起来,而无需再向外界要求读取某些函数库的内容;但按照此种方式编译生成的可执行程序会比较大。

动态库:一般是以.dll或.so结尾的文件,以动态链接的方式编译程序时,程序并不会把动态库加载到程序中,而是存储对应函数库的“索引”(位置信息),当程序需要读取某个函数库的内容时,程序便根据“索引”去寻找对应的函数库并将其中的内容加载进来,按照这种方式生成的可执行程序会比较小巧灵活,但不能独立运行。

很明显,我们的项目是按照动态链接的方式去加载dll文件的,如果找不到对应的动态库便会出现图1的错误,因此我们应该采用静态链接的方式去编译程序。具体的方案有如下两种:
方案一:
运行库选择MT的方式,也即是***多线程静态链接Release版本***。为什么在编译程序的时候会出现“无法启动程序,因为计算机中丢失了mfc120d.dll,尝试重新安装程序以解决此问题”
MFC的使用这一项选择“在静态库中使用MFC为什么在编译程序的时候会出现“无法启动程序,因为计算机中丢失了mfc120d.dll,尝试重新安装程序以解决此问题”
方案二:
把系统盘System32文件夹中的内容拷贝一份到项目工程的目录下,让程序运行时能直接加载到对应的dll文件。