【问题标题】:MinGW / gcc: The application was unable to start correctly (0xc000007b)MinGW / gcc:应用程序无法正确启动(0xc000007b)
【发布时间】: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


【解决方案1】:

我遇到了类似的问题。查看 Dependency Walker 我没有加载 API-MS-WIN-CORE 条目。但是,当我去编辑我的路径时,结果发现 bin 文件夹不在路径上。在我的情况下,将 mingw64 bin 文件夹添加到路径为我解决了这个问题。我只提到 API-MS-WIN-CORE 条目,因为我认为这可能是问题所在,但实际上它并没有导致我的问题。

【讨论】:

  • 我已经将mingw.64的路径添加到windows路径了,但是没有解决问题
【解决方案2】:

我得到了同样的错误代码,并使用 Dependency Walker 发现,在我的例子中,没有找到 64 位版本的 libwinpthread-1.dll。这帮助我解决了我的问题。 因此,解决方案是确定丢失的 dll,在系统上追踪它并在路径变量中引用它的位置,或者在没有它的情况下找出如何安装它。 也就是说,我还遇到了以下警告,这些警告在使用 Dependency Walker 时很重要。它目前已过时,实际上会显示 WIN-CORE dll 的错误结果:https://stackoverflow.com/a/36244483/4438237

为了解决这个问题,有一个名为 Dependencies by lucasg 的新程序可以正确解释这些内容,并且不会错误地告诉您这些错误丢失的 dll。

【讨论】:

    【解决方案3】:

    我得到了同样的错误,正如上面的答案中提到的,除了设置路径之外,问题是“路径没有被设置”,你也可以这样做;如果您出于某种原因不想设置路径:

    1. 打开 CMD
    2. cd C:\MinGW\bin 导航到mingw的bin目录
    3. 现在你可以编译代码如下 Gcc (你的 .c 文件的目录) -o (你的输出目录) for ex : gcc I:\dir\Hello.c -o I:\dir\output.exe

    或者,如果您想自动化该过程,您可以制作一个批处理文件来自动为您完成。 如果有人需要,这是批处理文件

    @echo 关闭

    C:

    cd\MinGW\bin\

    gcc I:\dir\*.c -o "I:\dir\Output.exe" Rem 将“dir”替换为您自己的目录,将 * 替换为您自己的文件名!

    暂停

    【讨论】:

      【解决方案4】:

      我有一个类似的错误,但通过编辑我的环境变量来解决它。 我将 g77 作为路径变量的一部分,通过删除它并单独保留 gfortran,错误消失了

      【讨论】:

        【解决方案5】:

        我在 Windows 10 上使用 cmake-gui 生成 MinGW-w64 项目并遇到同样的问题。

        我的解决方案:去启动窗口,搜索并打开 MinGW-w64 终端,然后在终端调用 cmake 并指定 cmake 选项。

        【讨论】:

          【解决方案6】:

          是的,旧帖子是正确的。是环境参数搞砸了。我得到了同样的错误。把msys64路径放到第一个就解决了:

          路径=c:\msys64\mingw64\bin;%PATH%

          msys64 路径是最后一个,现在是第一个。 Windows 启动后在命令行键入一次,如果您有管理员权限,则编辑 Path 环境参数。

          【讨论】:

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