f77文件通过了ifort编译,但在使用gfortran

问题描述

我正在尝试使用gfortran编译f77文件dfsynthe.for)。 在此之前,我尝试使用ifort -double-size 64 -save -o dfsynthe.exe dfsynthe.for的ifort对其进行编译,并且可以正常工作。 但是,当我尝试通过gfortran -std=legacy -fdec -w -o dfsynthe.exe dfsynthe.for使用gfortran时,出现了很多错误。我认为使用gfortran和ifort时语法上会有一些差异,但是我不知道它们到底是什么。

我的ifort版本是ifort (IFORT) 19.0.3.199 20190206,而gfortran版本是GNU Fortran (Ubuntu 8.3.0-6ubuntu1~18.10.1) 8.3.0

我从gfortran得到的错误主要有五种类型:

dfsynthe.for:135:51:

       OPEN(UNIT=15,STATUS='NEW',FORM='UNFORMATTED',1
Error: Syntax error in OPEN statement at (1)
dfsynthe.for:434:20:

       CLOSE(UNIT=12,disP='DELETE')
                    1
Error: Syntax error in CLOSE statement at (1)
dfsynthe.for:475:11:

      2 3046.604,2238.320,1713.711,1354.044,1096.776,1
Error: Syntax error in DATA statement at (1)
dfsynthe.for:3225:29:

   969 IF(T.GE.5000.)GO TO 979
                             1
Error: Label 979 referenced at (1) is never defined
dfsynthe.for:2327:48:

       EQUIvalence (D(21),D5(1)),(D(26),D6(1)),(D(31),D7(1))
                                                1
Error: Rank mismatch in array reference at (1) (1/2)

这是dfsynthe.for错误日志文件error.log链接

解决方法

您可能使行偏移了1个空格或更多。看来您正在尝试运行旧的Fortran旧代码。没问题,它应该使用Gfortran运行。检查您的源代码,并确认所有语句从第七列开始。如果一行具有行号,例如1000 continue,请确保该行号在第2-6列中。如果仍然无法正常工作,或者源代码格式正确,请在注释中留下说明您所学的内容。 您可以尝试将文件重命名为dfsynthe.F77,然后查看其工作原理。

,

您在源文件中有一些选项卡。用空格代替它们,您会走得更远。