【问题标题】:MSVC 2010 - Error 0xc000007b when building in x64MSVC 2010 - 在 x64 中构建时出现错误 0xc000007b
【发布时间】:2012-12-20 10:56:58
【问题描述】:

标题非常简单 - 在 x64 中构建时,我根本无法运行任何东西,并且我收到带有此错误代码的消息框。你知道这可能是什么问题吗?

【问题讨论】:

  • 原来这只是在调试模式下发生的,所以我发现我的一个 dll 只是 32 位的。一旦我更换它,一切都很好。

标签: visual-c++


【解决方案1】:

这是STATUS_INVALID_IMAGE_FORMAT,您可以在 ntstatus.h SDK 头文件中找到这些错误代码。

它肯定与构建 x64 代码密切相关。只要您的程序依赖于 32 位代码,尤其是在 DLL 中,您就会得到这个状态码。您的程序在启动时尝试加载 DLL 时将无法启动,64 位进程不能包含任何 32 位代码。或者反过来,一个 32 位进程试图加载一个 64 位 DLL。

查看您的程序的所有依赖项,尤其是您链接的导入库。一切都必须针对 x64 构建。您可以使用 SysInternals 的 ProcMon 实用程序来查找无法加载的 DLL,以防这是 ​​DLL Hell 问题。

【讨论】:

  • 感谢您的指导 - 我有一个不兼容 64 位的 msvcr100d.dll 版本。发布后我意识到该 exe 的发布版本运行良好。我用正确的文件替换了文件,现在一切都很好。
  • 链接到stackoverflow.com/questions/21356654/…,其中提到了 Dependency Walker,它帮助我找到了引用的 64 位库。
【解决方案2】:

只是对上述正确答案的补充:还要检查您的 .manifest-files (resp.#pragma comment(linker,"/manifestdependency...) 并确保您有 32 位的 processorArchitecture='x86'和 processorArchitecture='amd64' 用于 x64 代码。

【讨论】:

  • 根据 MSDN processorArchitecture 对于 x64 代码应该是 ia64。
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
相关资源
最近更新 更多