Visual C ++可执行文件并丢失MSVCR100d.dll
我知道这已经被问到在其他地方和答案,但我有MS Visual Studio 2010的问题。我已经开发了一个C ++可执行文件,但如果我运行版本的机器,没有VC ++运行时库(即,msvcr100d.dll),我得到“程序无法启动,因为msvcr100d.dll从您的计算机丢失”错误。
这很奇怪,原因有两个:
- 为什么它试图与可再发行的debugging版本链接?
- 我尝试应用此修复程序 ,将运行时库设置设置为/ MT而不是/ MD(multithreadingDLL),但这只会使问题变得更糟(如果手动复制msvcr100d.dll,则表示无法findmsvcp110 .DLL)。
如何将运行时库与我的可执行文件打包,以便可以在没有安装MS VC 2010或可再发行的计算机上运行它?
我知道包含DLL副本的安全风险被认为是一种安全风险,因为它不会被更新,但是我的目标是在短期内将这个可执行文件发送给几个朋友。
如果你正在编译“释放”模式,你绝对不应该需要debugging版本的CRT。 你可以告诉他们是DLL的debugging版本,因为它们以d
结尾。
更重要的是,debugging版本不是可重新分发的,所以它不像使用可执行文件“打包”它简单,或者压缩这些DLL。
检查一下,确保你在“release”模式下编译应用程序的所有组件,而且你正在链接正确版本的CRT和你使用的任何其他库(例如MFC,ATL等)。
当然,你会需要msvcr100.dll
(注意缺lessd
后缀),还有一些如果还没有安装。 引导您的朋友下载Visual C ++ 2010 Redistributable (或x64 ),或者通过构build安装程序自动将其包含在您的应用程序中。
对我来说这个问题出现在这种情况下:
我安装了VS2012,不再需要VS2010。 我想让我的电脑清洁,也删除了VS2010运行时可执行文件,认为没有其他程序会使用它。 然后,我想通过附加到程序来testing我的DLL(我们称之为程序X)。 我得到了同样的错误信息。 我认为我编译DLL时做了一些错误。 然而,真正的问题是我将DLL附加到程序X中,并且程序X在VS2010中编译了debugging信息。 这就是错误被抛出的原因。 我在VS2012中重新编译了程序X,错误消失了。
这个问题在MSDN库中解释,据我所知,安装微软的可再发行组件包可以帮助。
但有时可以使用以下解决scheme(作为开发人员的解决scheme):
在您的Visual Studio中,打开Project properties -> Configuration properties -> C/C++ -> Code generation
并将选项Runtime Library
更改为/MT
而不是/MD
通常情况下,错过.dll的应用程序会指出您需要的版本 – 如果不能正常工作,只需从此链接下载Microsoft Visual C ++ 2010 x86或x64即可:
对于32位操作系统: 这里
对于64位操作系统: 这里
我得到了同样的错误。
我在一个VS2012项目中引用了一个VS2010 DLL。
刚刚重新编译VS2012上的DLL,现在一切都很好。
debugging版本的vc ++库dll并不意味着被重新分配!
debugging版本的应用程序不可重新分发,并且Visual C ++库DLL的debugging版本不可再发行。 您可以将debugging版本的应用程序和Visual C ++ DLL仅部署到其他计算机上,仅用于debugging和testing没有安装Visual Studio的计算机上的应用程序。 有关更多信息,请参阅重新分发Visual C ++文件。
我也将提供链接: http : //msdn.microsoft.com/en-us/library/aa985618.aspx
- 文本编辑器打开大(巨大,巨大,大)的文本文件
- Windows批处理命令在Jenkins中如何使用环境variables?
- Windowsbatch file:如何用命令的结果设置variables?
- 如何将DOS / Windows换行符(CRLF)转换为Unix换行符(\ n)在Bash脚本中?
- 互斥和临界区别有什么区别?
- 在适用于Linux的Windows子系统上安装Oracle JDK
- 在Python 2.7中将zip文件内容解压缩到特定的目录
- batch file将具有特定扩展名的文件从多个目录复制到一个目录
- Windows 8 Runtime(WinRT / Windowsapp store应用/ Windows 10通用应用)与Silverlight和WPF相比如何?