在mingw-w64 / msys2中编译的应用程序,“该应用程序无法正确启动(0xc00007b)”

Rea*_*law 6 c++ windows msys mingw-w64 msys2

在中编译了应用程序后mingw-w64 64-bit Shell,它在shell内the application was unable to start correctly (0xc00007b)可以正常运行,但是在shell之外正常运行时会出现错误。

当抱怨缺少mDLL2 / mingw-w64 bin目录时,我从msys2 / mingw-w64 bin目录中移走了一些必需的DLL,但现在却出现了这种不透明的错误。我究竟做错了什么?

Rea*_*law 5

错误0xc00007b基本上意味着“无效的图像格式”,这通常在混合 64 位和 32 位 DLL 时发生。这是怎么回事,是你有一个64位应用程序,寻找一个特定的DLL,它在全球的路径,但一个路径是32位的。因此,问题是:它不会抱怨缺少 DLL,它只是尝试加载它。由于它是 32 位应用程序,而您的应用程序是 64 位应用程序,因此您会收到 error 0xc00007b

解决方案是将所有依赖的 DLL复制到应用程序路径。

下一个问题是你不知道哪些。

你可以用 msys2 shell 做的是:转到目录并运行命令:

ldd application.exe
Run Code Online (Sandbox Code Playgroud)

这将为您提供应用程序依赖的 DLL 列表。将 msys2/mingw-w64 相关的 DLL 复制到目录中。这将允许应用程序在查看 PATH 并找到 32 位 DLL 之前找到它们。

  • 不幸的是,至少在我的情况下 ldd 报告了“一些”依赖项,包括一些相当无用的依赖项,例如`??? => ???(0xd0000)` 而依赖walker向我展示了那些实际上丢失的:| (3认同)
  • [Dependency Walker](http://www.dependencywalker.com/) 显示使用编译时动态链接链接的所有依赖项。类似于您建议的使用 `ldd` 的方法,它不会考虑使用运行时动态链接链接的依赖项(Dependency Walker 允许您分析您的应用程序,因此您可以通过这种方式捕获其中的一些)。 (2认同)