【发布时间】:2014-09-27 06:02:16
【问题描述】:
我一直在使用 MinGW 和 GNU Fortran 编译器来在 Windows 上编译 Fortran 程序,这一直是一个成功的方法。但是,过去 4 天我收到以下错误:The application was unable to start correctly (0xc000007b). Click OK to close the application.
只有在运行我自己编写并使用 MinGW/gfortran 组合编译的应用程序时才会发生该错误。使用 Visual Studio 和 iFort 编译时,运行应用程序没有问题。该错误似乎具有追溯力:很久以前使用 gfortran 编译并运行到现在完美的应用程序也会中断,即使我没有重新编译它们。这让我认为这是一个动态库问题。网上搜索显示可能是64位dll和32位应用程序的兼容性问题
我使用的是 Windows 7。我记得在开始出现问题之前所做的最新事情之一是尝试更新 MinGW;我使用了 mingw-get update 和 mingw-get upgrade 命令行。
在网上看了一圈后,我尝试了以下修复:
- 重新安装了 Visual C++ 运行时环境
- 重新安装了 .NET 框架
- 下载并替换了一堆 .dll,如 mscvr100.dll、mscvr100d.dll 等...
- 卸载并重新安装 MinGW 以确保我拥有最新的 gcc 版本
- 在一个简单的应用程序(“Hello World!”类型程序)上运行 Dependency Walker
Dependency Walker 告诉我找不到许多 .dll(完整列表:API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL、API-MS-WIN-CORE-WINRT-ERROR- L1-1-0.DLL,API-MS-WIN-CORE-WINRT-L1-1-0.DLL,API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL,API-MS- WIN-CORE-WINRT-STRING-L1-1-0.DLL、API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL、DCOMP.DLL、GPSVC.DLL、IESHIMS.DLL)。
它还以红色突出显示 libquadmath-0.dll(libgfortran-3.dll 似乎依赖于它)。事实上,libquadmath-0.dll 似乎是一个 32 位程序中间的 64 位 DLL。当使用 Dependency Walker 打开上述 .dll 时,我可以看到这个库中的所有模块都是 x86,除了库本身是 x64(DW 的 CPU 列)。我不确定这怎么可能/如何解决。该库位于 Python/Anaconda 文件夹中(我几周前安装了 Python 和 Anaconda,当时没有出现问题)。
如果有人知道如何让我的环境在不重新安装 Windows 的情况下再次工作,我将不胜感激!谢谢!!
【问题讨论】:
-
0xC000007B STATUS_INVALID_IMAGE_FORMAT {坏图像}。几乎可以肯定,您的应用程序正在尝试加载 64 位 DLL。我会冒险猜测问题是在更改 PATH 环境变量后开始出现的,这将 64 位 DLL 置于 32 位之前。 (请注意,根据上下文,此类更改可能不会立即生效。)考虑更改 PATH,或将 32 位 DLL 的副本与需要它的可执行文件放在同一文件夹中。
-
@HarryJohnston 谢谢。我们谈论的是 Windows 范围的 PATH 变量,还是 MinGW 特定的 PATH?另外,根据 Dependency Walker 的说法,应该是这个 libquadmath-0.dll 负责吧?还是上面列出的另一个? (如果我必须下载 32 位版本并将其放在同一个文件夹中......)
-
是的,我希望 Dependency Walker 显示的警告是正确的。它将是 Windows PATH 变量,除非 MinGW 正在做一些非常奇怪的事情。如果对 PATH 的更改确实是负责任的,那么正确的 DLL 应该仍然存在;在命令行尝试
where libquadmath-0.dll。 -
好的,我认为问题出在 libquadmath-0 上。我只有这个文件在一个位置(Anaconda 文件夹),但使用 libquadmath 的 libgfortran-3.dll 在两个位置:minGW 文件夹和 Anaconda 文件夹。我现在怀疑必须在 minGW 文件夹中的 32 位 libquadmath-0 丢失了,这就是为什么使用 Anaconda 的 64 位的原因。我将不得不尝试在网上找到这个 dll!
-
奇数;当您重新安装 MinGW 时,安装程序不应该真正安装 libgfortran-3.dll 而没有它的依赖项。可能设置中存在错误,如果您可以重现它,可能值得报告。
标签: windows dll windows-runtime mingw gfortran