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

12

我一直使用MinGW和GNU Fortran编译器在Windows上编译Fortran程序已经有一段时间了,这一直是一个成功的方法。但是,过去4天以来我一直遇到以下错误:
应用程序无法正确启动(0xc000007b)。单击“确定”关闭应用程序。

只有在运行我自己编写并使用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的情况下使我的环境再次工作,我将非常感激!谢谢!!


3
0xC000007B 状态无效图像格式 {坏映像}。极有可能是您的应用程序试图加载64位DLL。我敢猜测,问题发生在更改了PATH环境变量后,将64位DLL放在32位DLL之前。请注意,根据上下文,这样的更改可能不会立即生效。考虑更改PATH或将32位DLL的副本放在需要它的可执行文件的同一文件夹中。 - Harry Johnston
@HarryJohnston 谢谢。我们是在谈论Windows的PATH变量,还是MinGW特定的PATH?另外,根据Dependency Walker,应该是这个libquadmath-0.dll有问题对吧?或者可能是上面列出的其他文件之一吗?(如果我需要下载32位版本并将其放在同一个文件夹中...) - Etienne Pellegrini
是的,我希望Dependency Walker显示的警告是正确的。除非MinGW做了一些极其奇怪的事情,否则它应该是Windows PATH变量的问题。如果确实是PATH的更改导致的问题,正确的DLL仍然应该存在;请在命令行中尝试“where libquadmath-0.dll”。 - Harry Johnston
好的,我认为问题确实出在libquadmath-0上。我只有一个文件在一个位置(Anaconda文件夹),但使用libquadmath的libgfortran-3.dll在两个位置:minGW文件夹和Anaconda文件夹。我现在怀疑32位的libquadmath-0本来应该在minGW文件夹中,但是不知道为什么会丢失,所以64位的版本从Anaconda中被使用。我需要尝试在网上找到这个dll! - Etienne Pellegrini
奇怪的是,当您重新安装MinGW时,安装程序不应该在没有其依赖项的情况下安装libgfortran-3.dll。也许设置中存在错误,如果您能够重现它,那么报告一下可能会有所帮助。 - Harry Johnston
6个回答

3

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


1
我已经将mingw.64的路径添加到Windows路径中,但这并没有解决问题。 - AAEM

1
我遇到了同样的错误代码,并使用依赖项检查器发现,在我的情况下,无法找到libwinpthread-1.dll的64位版本。这帮助我解决了问题。 因此,解决方案是确定缺少的dll,在系统上找到它并引用其路径变量中的位置,或者找出如何安装它(如果您没有它)。 话虽如此,我也遇到了以下重要的警告,当使用依赖项检查器时需要知道。它目前已过时,实际上会显示WIN-CORE dll的虚假结果:https://dev59.com/TVoV5IYBdhLWcg3wc-cm#36244483 为了解决这个问题,有一个名为Dependencies by lucasg的新程序,可以正确解释这些内容,并不会错误地告诉您这些虚假的缺失dll。

1
我遇到了相同的错误,如上面的答案所述,问题在于“路径未设置”,除了设置路径,您还可以采取以下措施;如果由于某种原因您不想设置路径:
1.打开CMD 2.cd C:\MinGW\bin以导航到mingw的bin目录 3.现在您可以编译代码,如下所示:Gcc(.c文件的目录)-o(输出目录),例如:gcc I:\dir\Hello.c -o I:\dir\output.exe 或者,如果您想自动化该过程,则可以制作批处理文件以自动执行此操作。如果有人需要,这是批处理文件:
@echo off C: cd \MinGW\bin\ gcc I:\dir\*.c -o "I:\dir\Output.exe" Rem Replace "dir" with your own directory and * with ur own FileName! pause

0

我曾经遇到过类似的错误,但通过编辑我的环境变量来解决了它。 我在路径变量中有g77,通过将其删除并只保留gfortran,错误消失了。


0

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

我的解决方案:进入开始菜单,搜索并打开MinGW-w64终端,然后在终端中调用cmake并指定cmake选项。


0

是的,旧帖子说得对。这是环境参数出了问题。我也遇到了同样的错误。将msys64路径放在第一位即可解决:

Path=c:\msys64\mingw64\bin;%PATH%

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接