MinGW / gcc:应用程序无法正常启动(0xc000007b)

时间:2014-08-04 17:21:06

标签: windows dll windows-runtime mingw gfortran

我一直在使用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版本
- 在一个简单的应用程序上运行Dependency Walker(“Hello World!”类型程序)

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的情况下让我的环境再次运行,我将不胜感激!谢谢!

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我遇到了同样的错误,如上面的回答所述,问题是除了设置路径外,“没有设置路径”也可以执行此操作;如果您由于某种原因不想设置路径:

  1. 打开CMD
  2. cd C:\ MinGW \ bin导航到mingw的bin目录
  3. 现在您可以按照以下Gcc(您的.c文件的目录)-o(您的输出目录)将代码编译为ex:gcc I:\ dir \ Hello.c -o I:\ dir \ output.exe < / li>

或者,如果您想自动执行该过程,则可以制作一个批处理文件来自动为您执行此操作。 这是任何人需要的批处理文件

@回声关闭

C:

cd \ MinGW \ bin \

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

暂停

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我得到了同样的错误代码,并使用Dependency Walker发现在我的情况下,找不到64位版本的libwinpthread-1.dll。这有助于我解决问题。 因此,解决方案是确定丢失的dll,在系统上进行跟踪并在path变量中引用其位置,或者在没有该DLL的情况下查找如何安装它。 也就是说,我还遇到了以下警告,使用Dependency Walker时需要了解这一点。当前已过期,实际上会显示WIN-CORE dll的错误结果:https://stackoverflow.com/a/36244483/4438237

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

答案 4 :(得分:0)

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

我的解决方案:打开windows,搜索并打开MinGW-w64终端,然后在终端中调用带有指定cmake选项的cmake。

答案 5 :(得分:0)

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

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

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