【问题标题】:VS2012 Error: The application was unable to start correctly (0xc000007b)VS2012 错误:应用程序无法正确启动(0xc000007b)
【发布时间】:2014-02-16 20:42:23
【问题描述】:

在尝试运行我在 Visual Studio 2012 中构建的 C++ SFML 32 位程序的 exe 文件后,我收到错误“应用程序无法正确启动 (0xc000007b)”。我在我的项目中静态链接了 SFML dll ,但在我的程序中加入了以下 dll:

libsndfile-1.dll
openal32.dll
msvcp110.dll
msvcp110d.dll
msvcr110.dll
msvcr110d.dll

有什么问题?

【问题讨论】:

  • msvcr110d.dll - 这是用于调试版本。尝试安装 MSVC++ 2012 可再发行组件。

标签: c++ visual-studio-2012 dll sfml


【解决方案1】:

您遇到的实际错误代码是0xC000007B。那是NTSTATUS 错误代码STATUS_INVALID_IMAGE_FORMAT。几乎总是会出现该错误,因为应用程序是 32 位并试图加载 64 位模块,反之亦然。在您的情况下,您声明您的应用程序是 32 位的,因此它似乎正在尝试链接到 64 位 DLL。使用 Dependency Walker 之类的工具来诊断模块的位数错误。

我不明白您为什么要同时分发 MSVC 运行时的发布版本和调试版本。你只需要一个,那个应该是发布版本。以d 结尾的文件是调试版本。您不得重新分发它们。

【讨论】:

  • @user 你还卡着吗?
  • 不,我解决了这个问题。感谢您的帮助。
  • 我使用的是 64 位版本的 msvcp110.dll 而不是 32 位版本。
【解决方案2】:

错误代码0xC000007B 如果您运行的应用程序错误地与作为对应于 .dll 的导入库的 .lib 文件静态链接(而不是作为静态库的 .lib 文件),也会导致错误代码 0xC000007B )。如果您想了解更多关于静态库和导入库的区别,请参阅Why are LIB files beasts of such a duplicitous nature?

【讨论】:

    【解决方案3】:

    我昨天也遇到了同样的问题。然后,在该应用程序开始运行后,我为 VS 安装了 Redistributable 设置,即 vc_redist.x86 用于 32 位机器。您可以根据您的机器使用 32 位或 64 位设置。

    希望对您有所帮助。 谢谢

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2014-07-21
      • 2019-08-29
      • 2016-11-13
      • 2017-08-21
      相关资源
      最近更新 更多