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