【C++】VS生成的程序在安装了vc运行库的机器上提示“丢失MSVCR100D.dll”

时间:2024-04-12 12:38:16

理论上,如果一台电脑无须安装多大2.5G的VS2010,只要安装了vc2010运行库,也就是安装了vcredist2010_x86.exe和对应的Framework运行库,那么只是你将解决方案所在的文件夹中的Debug文件夹扔到这台机器上,直接双击里面的exe文件就可以运行了。一般情况下,由于用户会在机器上安装软件或者游戏,一般都会不知不觉装好vcredist2010_x86.exe和对应的Framework运行库,直接将Debug的东西以绿色版发布,会比打包成一个setup.exe,,让用户安装,便捷得多。在VC2010将解决方案打包成安装向导具体见《【C++】VS2010将写好的程序打包成安装文件发布》(点击打开链接)。你也舒服,用户也舒服。

但是,如果你的解决方案按照默认属性来,没设置好配置属性,直接将Debug文件夹丢给别人,会提示“丢失MSVCR100D.dll”导致程序无须运行。

MSVCR100D.dll是VS2010才有东西,调试用的dll,而不是vc2010运行库里面的核心dll,MSVCR100.dll。前后少了个D,当然两个dll是完全不同的。此时你有两个解决方法:

一、最没有技术含量的,就是将本机C:\Windows\System32中的MSVCR100.dll,复制到运行机器上同样的位置,但是我们不推荐这种方式。

二、我们将VS2010静态编译。因为使用动态编译,使用VS2010编译的程序在其它系统中运行时经常会出现找不到相关的DLL文件,我们可以使用静态编译的方法把这些运行依赖文件打包到exe中来,以减少对环境的依赖,但不代表用户可以不装vc2010运行库就可以直接运行你的程序,因为MSVCR100.dll还是需要的。

具体设置如下:

一般配置配置两项:项目->配置属性->常规->MFC的使用:在静态库中使用MFC。项目->配置属性->C/C++->代码生成->运行库:选择/MT或者/MD。 

【C++】VS2010生成的程序在安装了vc2010运行库的机器上提示“丢失MSVCR100D.dll”

之后,清理一下解决方案,别让它重新生成,即可:

【C++】VS2010生成的程序在安装了vc2010运行库的机器上提示“丢失MSVCR100D.dll”

如果在重新生成的时候,报:error LNK2019: 无法解析的外部符号 __imp___CrtDbgReportW的错误,那么所在的项目点右键,选择“属性” -> “配置属性” -> “C/C++” -> “预处理器” -> “预处理定义” 移除_DENUG或将 _DENUG改为NDENUG即可。

【C++】VS2010生成的程序在安装了vc2010运行库的机器上提示“丢失MSVCR100D.dll”

这样重新生成之后,解决方案所在文件夹下的Debug文件夹里面的exe,则变成依赖于VC2010运行库了。直接丢个Debug文件夹到已经安装VC2010的机子里面的exe可以直接运行了。