37

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

这很奇怪,原因有两个:

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

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

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

4

6 回答 6

43

如果您在“发布”模式下编译,则绝对不需要 CRT 的调试版本。您可以说它们是 DLL 的调试版本,因为它们以d.

更重要的是,调试版本是不可再分发的,因此它不像将其与可执行文件“打包”或压缩这些 DLL 一样简单。

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

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

于 2012-05-02T02:13:08.800 回答
2

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

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

于 2013-11-20T10:02:52.663 回答
2

这个问题在MSDN Library中有解释,据我了解,安装 Microsoft 的 Redistributable Package 会有所帮助。

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

在您的 Visual Studio 中,打开选项Project properties -> Configuration properties -> C/C++ -> Code generation 并将其更改Runtime Library/MT/MD

于 2015-04-28T13:04:21.467 回答
1

通常,缺少 .dll 的应用程序会指示您需要的版本——如果一个不工作,只需从此链接下载 Microsoft Visual C++ 2010 x86 或 x64:

对于 32 位操作系统:这里

对于 64 位操作系统:这里

于 2013-07-10T17:24:49.737 回答
1

我得到了同样的错误。

我在 VS2012 项目中引用了 VS2010 DLL。

刚刚在VS2012上重新编译了DLL,现在一切都很好。

于 2013-12-23T20:34:31.837 回答
1

vc++ 库 dll 的调试版本并不意味着重新分发!

应用程序的调试版本不可再分发,Visual C++ 库 DLL 的调试版本不可再分发。您只能将调试版本的应用程序和 Visual C++ DLL 部署到您的其他计算机,其唯一目的是在未安装 Visual Studio 的计算机上调试和测试应用程序。有关详细信息,请参阅重新分发 Visual C++ 文件。

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

于 2014-10-10T13:50:08.303 回答