【问题标题】:How to get rid of Debug runtime DLLs如何摆脱调试运行时 DLL
【发布时间】:2016-04-11 17:25:07
【问题描述】:

我正在使用 VS2015 创建将在项目中使用的 DLL(将在另一台 PC 上运行)。

我已经在我的 PC 上构建了 Release 版本的 DLL,但是当我在另一台 PC 上启动项目时,我收到以下错误:

  • VCRUNTIME140D.dll 丢失
  • MSVCP140D.dll 丢失
  • MSVCP140D.dll 丢失

在创建这些 DLL 时我应该采取哪些步骤,以便在任何 PC 上运行项目都不需要这些调试运行时 DLL。

【问题讨论】:

  • “在另一台 PC 上启动项目”是什么意思?运行一些使用您的 DLL 的程序?将其加载到 IDE 中?还有什么?
  • 我的意思是当我尝试在另一台 PC 上运行项目的可执行文件时。可执行文件需要我创建的一些 DLL(例如 myDLL_1.dll、myDLL_2.dll)。由于这些自行创建的 DLL,当我尝试在另一台 PC 上运行 .exe 时出现上述错误(因为未安装 VS2015,不应在另一台 PC 上安装)。
  • 你确定是因为你的 DLL吗?还是一个特定的 DLL? 所有您的 DLL 都是在发布模式下构建的,没有调试依赖项?和可执行程序一样,它是在发布模式下构建的,没有调试依赖?
  • 它应归功于 DLL 只是因为项目的其余部分是在另一个工具中创建的,该工具也存在于另一台机器上。此外,通过遵循以下答案中给出的建议,错误得到了改变。现在,我没有丢失VCRUNTIME140D.dll,而是因为丢失了VCRUNTIME140.dll 而出错。

标签: c++ visual-studio dll


【解决方案1】:

尽管它是在发布模式下构建的,但如果您需要“...D.dll”,那么混合中有调试版本。

这可能是您拥有的第三方 dll 或 DEBUG_DEBUG 定义浮动的结果。

很可能是(dll 或主机 exe 的)构建被明确设置为使用运行时的调试版本 (/MDd)。 Change this in the project settings 不使用运行时的调试版本 (/MD)。

  1. 打开项目的“属性页”对话框。
  2. 展开 C/C++ 文件夹。
  3. 选择代码生成属性页。
  4. 修改运行时库属性。

为了帮助诊断哪个二进制文件负责调试依赖,您可以使用Dependency Walker 来追踪违规者。它将为您提供每个文件的依赖项列表(作为树)。

一般来说,如果目标机器上缺少 C++ 运行时(发行版),您应该安装 C++ 可再发行组件。在撰写本文时,VS 2015 redistributable 可用here

【讨论】:

  • 我已将属性更改为/MT,现在我得到了VCRUNTIME140.dll 缺失的错误,而不是VCRUNTIME140D.dll
  • @skm。仍然有需要运行时的 dll(或 exe),只是这次是 C++ 运行时的“发布”版本。
  • 也就是说,如果其余的 exe 和 dll 依赖于运行时,最好你也这样做。它缓解了与资源管理等相关的一类问题;最好使用/MD
  • @skm。如果您缺少运行时 dll(发布版本),请使用可从 MS 重新分发的运行时安装它们。
  • 谢谢,我认为它现在可以工作了。但我只有在完全尝试之后才能确定。那么我会接受答案:)
【解决方案2】:

C/C++ -> 代码生成 -> 将 运行时库 设置为:

  • 多线程调试 (/MTd)

是的,如果您想在远程机器上调试进程,则非常需要这样的设置。因此,不要听别人说“仅使用 Release 构建进行测试”。显然,您需要安装远程工具。

【讨论】:

    【解决方案3】:

    正如 Niall 所说,您应该使用dependency walker 来查找导致错误的项目部分,毕竟它可能不是问题的 dll。

    我敢打赌,这只是您忘记并在调试模式下构建的项目的一部分,因为调试 dll 不包含在 C++ 再分发安装程序中,因此不应该用于生产。

    【讨论】:

    • 它应归于 DLL 只是因为项目的其余部分是在另一个工具中创建的,该工具也存在于另一台机器上。此外,通过遵循以下答案中给出的建议,错误得到了改变。现在,我没有丢失VCRUNTIME140D.dll,而是因为丢失了VCRUNTIME140.dll 而出错。
    • 你确定另一台机器上安装了VS2015的C++ runtime吗?
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2020-11-01
    • 2023-03-14
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多