问题描述
我正在尝试使用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,然后查看其工作原理。
您在源文件中有一些选项卡。用空格代替它们,您会走得更远。