【问题标题】:C++ application fails to start correctly (0xc000000d)C++ 应用程序无法正确启动 (0xc000000d)
【发布时间】:2018-01-18 21:56:13
【问题描述】:

我正在两台开发计算机上使用 VS2010 编写 C++ 应用程序 - 两者都是 Win7 64 位 SP1。我使用 git 来同步存储库。

在其中一台机器上编译的可执行文件(以及测试执行程序)停止工作并出现以下错误,而在另一台机器上它工作正常,我能够继续开发。

应用程序无法正确启动 (0xc000000d)。单击“确定”关闭应用程序。

我尝试删除存储库并再次克隆它。我还确保我拥有相同版本的 Boost、git、Visual Studio。另外,我尝试调试(介入),但错误发生在到达任何代码行之前。

请注意,据我了解,我将 Visual Studio 的解决方案\项目配置文件跟踪为 detailed here

我很茫然,你将如何调试这个?

更新 1: 只有 Debug 版本无法运行。 Release 版本运行良好

更新 2: 不工作的可执行文件确实在另一台计算机上工作!

更新 3: 我重新安装了 VS2010(完全相同的版本) - 没有帮助。令人惊讶的是,两台机器之间编译的文件大小不一样。

【问题讨论】:

  • 使用 Dependency Walker - dependencywalker.com - 查看是否存在 DLL 版本差异。
  • 你能调试它并检查它直到它能够运行的地方吗?
  • @rturrado - 我尝试调试(介入),但在到达任何代码行之前发生错误
  • 检查对 WinSXS 缓存的引用。相同的库 VC90.CRT(这是用于 VS2008,假设前身)可能有不同的版本。这可能是由仅安装在其中一台计算机上的 VS 服务包引起的。检查开发的应用程序所需的版本以及在WinSXS中找到的版本。
  • 您能否查看事件日志以获取有关此异常的更多信息以及它发生的地址?

标签: c++ visual-studio


【解决方案1】:

我遇到了与您提到的相同的问题。 我的解决方案:

  1. 清理清单文件并重建
  2. 在属性页-> 清单工具-> 确保“附加选项”设置为空。 (我之前设置为“/validate_manifest”)。

或者您可以尝试“嵌入清单 -> 否”,重新构建,然后设置回是。这听起来很荒谬,但有时它确实有效。我不知道为什么。

【讨论】:

    【解决方案2】:

    我在 Win7 / VS2010 / C++ 上突然出现同样的现象,没有任何警告。 Debug App 无法启动,在初始化和加载多个 dll 时得到 0xC000000D。找到了我自己负责的一个基本 dll,使用了链接器设置。修改设置,增量重建 -> 应用程序启动,全部重建 -> 应用程序再次崩溃。在链接器设置中将“生成清单”设置为“否”后,示例应用程序可以工作,但主应用程序仍然崩溃。在为我的大部分 dll 设置 "generate manifest" 为 "no" 之后 -> 应用程序再次以调试模式启动。这些东西非常虚假,因为有些 dll 需要修改其他的设置。

    【讨论】:

      【解决方案3】:

      看看这个问题的前两个答案

      Program crashes with 0xC000000D and no exceptions - how do I debug it?

      在失败的机器上,尝试在调试器下运行调试可执行文件,并更新您的问题以说明会发生什么。如果它崩溃了,您是否能够在消息框仍然存在时附加调试器并获得一个堆栈跟踪,告诉您它正在崩溃的函数?

      【讨论】:

      • 当我在 VS2010 (F5) 中运行它和运行可执行文件时都会发生错误。错误是一个带有单个确定按钮的弹出窗口(没有中止\重试\忽略选项)
      • 那么在那个阶段,您是否可以使用 debug->attach-to-process 附加调试器?
      【解决方案4】:

      这是最奇怪的事情......

      尝试删除“ipch”目录,然后重建。

      希望它对你有用,我已经浪费了很多时间。

      【讨论】:

      • 我尝试了几次git cleanup,同样删除了ipch目录也无济于事
      【解决方案5】:

      禁用/启用预编译头文件为我解决了这个问题。 我只在 Debug x64 上遇到崩溃 - 我猜这与从 boost 1.50 升级到 1.52 有关,同时保留 pch 文件。

      【讨论】:

        【解决方案6】:

        在我的情况下,我通过在所有项目上将生成清单设置为 NO 来让它再次工作

        【讨论】:

          【解决方案7】:

          我已将“嵌入清单”设置更改为 NO,然后又更改为 YES,但这没有帮助。 对我来说,将 General->Platform Toolset 设置为我的程序的 Windows SDK 7.1 以及用它编译的所有依赖库都有帮助。

          【讨论】:

            【解决方案8】:

            这是ipch,只需删除整个文件夹,它就会清除它。我也迷茫了一阵子。

            【讨论】:

              【解决方案9】:

              我在 MSVC2015 上运行的项目中使用使用 MSVC2010 编译的 OpenCV 库时看到错误。将项目配置属性->常规->平台工具集从 Visual Studio 2015(v140) 更改为 Visual Studio 2010(v100) 解决了该错误。

              【讨论】:

                猜你喜欢
                • 2016-01-25
                • 2014-07-21
                • 2016-08-15
                • 2014-08-27
                • 1970-01-01
                相关资源
                最近更新 更多