繁体   English   中英

Visual C ++可执行文件和缺少MSVCR100d.dll

[英]Visual C++ executable and missing MSVCR100d.dll

我知道这已在其他地方被问过并回答了,但我遇到了MS Visual Studio 2010的问题。我开发了一个C ++可执行文件,但是如果我在没有VC ++运行时库的机器上运行Release版本(即,msvcr100d.dll),我得到“程序无法启动因为你的计算机缺少msvcr100d.dll”错误。

这有点奇怪,原因有两个:

  • 为什么要尝试与可再发行的调试版本链接?
  • 我尝试应用此修复程序 ,将运行时库设置设置为/ MT而不是/ MD(多线程DLL),但这只会使问题变得更糟(如果我手动复制msvcr100d.dll,则表示无法找到msvcp110 .DLL)。

如何将运行时库与我的可执行文件打包在一起,以便我可以在没有安装MS VC 2010或可再发行组件的机器上运行它?

我知道包含DLL副本的安全风险因为它不会被更新,但我的目标只是在短期内将此可执行文件发送给几个朋友。

如果您正在以“发布”模式进行编译,那么您绝对不需要CRT的调试版本。 您可以告诉它们是DLL的调试版本,因为它们以d结尾。

更重要的是,调试版本不是可再发行版本,因此它不像使用可执行文件“打包”它或者压缩这些DLL那么简单。

检查以确保您正在以“发布”模式编译应用程序的所有组件,并且您正在链接正确版本的CRT和您使用的任何其他库(例如,MFC,ATL等)。

当然,您需要msvcr100.dll (请注意缺少d后缀)和其他一些(如果尚未安装)。 指导您的朋友下载Visual C ++ 2010 Redistributable (或x64 ),或通过构建安装程序自动将其包含在您的应用程序中。

对我来说,问题出现在这种情况:

我安装了VS2012,不再需要VS2010了。 我想让我的计算机干净并且还删除了VS2010运行时可执行文件,认为没有其他程序会使用它。 然后我想通过将它附加到程序来测试我的DLL(让我们称之为程序X)。 我收到了同样的错误消息。 我认为编译DLL时我做错了。 但是,真正的问题是我将DLL附加到程序X,而程序X是在VS2010中使用调试信息编译的。 这就是抛出错误的原因。 我在VS2012中重新编译了程序X,错误消失了。

MSDN Library中解释此问题,据我所知,安装Microsoft的Redistributable Package可以提供帮助。

但有时可以使用以下解决方案(作为开发人员的解决方案):

在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,现在一切都很好。

vc ++库dll的调试版本不打算重新分发!

应用程序的调试版本不可再发行,Visual C ++库DLL的调试版本不可再发行。 您可以将应用程序和Visual C ++ DLL的调试版本仅部署到其他计算机,仅用于在未安装Visual Studio的计算机上调试和测试应用程序。 有关更多信息,请参阅重新分发Visual C ++文件。

我也将提供链接: http//msdn.microsoft.com/en-us/library/aa985618.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM