在 mingw-w64/msys2 中编译的应用程序,“应用程序无法正确启动(0xc00007b”
Posted
技术标签:
【中文标题】在 mingw-w64/msys2 中编译的应用程序,“应用程序无法正确启动(0xc00007b”【英文标题】:Application compiled in mingw-w64/msys2, "the application was unable to start correctly (0xc00007b" 【发布时间】:2016-03-23 06:55:19 【问题描述】:在mingw-w64 64-bit Shell
中编译一个应用程序后,它在shell内运行良好,但在shell外正常运行时报错the application was unable to start correctly (0xc00007b)
。
当它抱怨丢失它们时,我从 msys2/mingw-w64 bin 目录中移动了一些必要的 DLL,但现在它给出了这个不透明的错误。我做错了什么?
【问题讨论】:
【参考方案1】:错误0xc00007b
基本上意味着“无效的图像格式”,通常在混合 64 位和 32 位 DLL 时发生。正在发生的事情是,您有一个 64 位应用程序,正在寻找一个特定的 DLL,它 在全局路径中,但路径中的那个是 32 位的。因此,问题是:它不会抱怨丢失的 DLL,它只是尝试加载它。由于它是 32 位应用程序,而您的应用程序是 64 位应用程序,您会收到错误 0xc00007b
。
解决方案是将所有相关的 DLL 复制到应用程序路径。
下一个问题是你不知道哪些。
你可以用msys2 shell做的是:进入目录并运行命令:
ldd application.exe
这将为您提供应用程序所依赖的 DLL 列表。将msys2/mingw-w64相关的DLL复制到目录下。这将允许应用程序在查找 PATH 并查找 32 位 DLL 之前找到它们。
【讨论】:
Dependency Walker 显示使用编译时动态链接链接的所有依赖项。与使用ldd
的建议方法类似,它不会考虑使用运行时动态链接链接的依赖项(Dependency Walker 允许您分析您的应用程序,因此您可以通过这种方式捕获其中一些)。
@IInspectable 当然,我知道依赖walker。这是一个很棒的工具。好多年没用过了。 ldd
是 mingw-w64 的一部分,所以我发现使用它很有用。
感谢有用的线程。尚不确定它是否会导致我的问题,但无论哪种方式都很有价值。因为它可能是相关的:(A)在 64 位操作系统上运行 32 位交叉编译程序时是否会发生这种情况,以及(B)你知道为什么,而从资源管理器或命令提示符运行会出现此错误 -当从同一个 MSYS2 提供的 mingw32
shell 运行时,程序会立即退出而没有明显错误?
不幸的是,至少在我的情况下,ldd 报告了“一些”依赖项,包括一些相当无用的依赖项,例如 ??? => ??? (0xd0000)
,而依赖项步行者向我展示了实际上缺少的依赖项:|以上是关于在 mingw-w64/msys2 中编译的应用程序,“应用程序无法正确启动(0xc00007b”的主要内容,如果未能解决你的问题,请参考以下文章
怎么在windows中编iphone\itouch程序。最好能是win7环境