首页 > 解决方案 > Fortran90 错误:“push”的指令后缀无效

问题描述

我正在尝试编译我的第一个 fortran90 程序 Hello

Program Hello
Print *, "Hello World!"
End Program Hello

在cygwin中

$ g95 -o hello hello.f90
C:\cygwin64\tmp/ccPR6KU1.s: Assembler messages:
C:\cygwin64\tmp/ccPR6KU1.s:11: Error: invalid instruction suffix for `push'
C:\cygwin64\tmp/ccPR6KU1.s:28: Error: invalid instruction suffix for `push'

根据我的研究,最常见的原因是将 32 位汇编代码与 64 位汇编器混合,这也被称为混合 32 位 binutils 和 64 位 gcc。

但我的 binutils 不是 32 位的。

$ cygcheck -c | grep binutils
binutils                                2.29-1                OK
mingw64-i686-binutils-debuginfo         2.29.1.787c9873-1     OK
mingw64-x86_64-binutils                 2.29.1.787c9873-1     OK
mingw64-x86_64-binutils-debuginfo       2.29.1.787c9873-1     OK

这是什么意思,我该如何着手解决这个问题?

我尝试过的其他一些事情

$ g95 -o -m32 hello hello.f90
same errors as previously plus
g95.exe: hello: No such file or directory
$ gfortran -o hello hello.f90
gfortran: fatal error: -fuse-linker-plugin, but cyglto_plugin.dll not found
compilation terminated.
$  f95 hello.f90 -o hello.exe
f95: fatal error: -fuse-linker-plugin, but cyglto_plugin.dll not found
compilation terminated.

标签: fortrancygwingfortranfortran90

解决方案


在这里找到了答案。原来我的 gcc 和 gcc-fortran 不是同一个版本。

$ cygcheck -c | grep gcc
gcc-core                                7.4.0-1               OK
gcc-debuginfo                           7.4.0-1               OK
gcc-fortran                             8.3.0-1               OK

这可以完成工作

apt-cyg remove gcc-fortran
apt-cyg install gcc-fortran

推荐阅读