f77文件通过ifort编译,但在使用gfortran时失败
我正在尝试使用gfortran编译一个f77文件()。 在此之前,我尝试使用ifort byf77文件通过ifort编译,但在使用gfortran时失败,fortran,gfortran,Fortran,Gfortran,我正在尝试使用gfortran编译一个f77文件()。 在此之前,我尝试使用ifort byifort-double size 64-save-o dfsynthesis.exe dfsynthesis.for来编译它,结果成功了。 然而,当我尝试使用gfortran bygfortran-std=legacy-fdec-w-o dfsynthel.exe dfsynthel.for时,我遇到了一系列错误。我假设使用gfortran和ifort时在语法上存在一些差异,但我不知道它们到底是什么 我
ifort-double size 64-save-o dfsynthesis.exe dfsynthesis.for
来编译它,结果成功了。
然而,当我尝试使用gfortran bygfortran-std=legacy-fdec-w-o dfsynthel.exe dfsynthel.for
时,我遇到了一系列错误。我假设使用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)
这是的链接和错误日志文件。您可以将行偏移1个或更多空间。您似乎正在尝试运行旧的Fortran遗留代码。这没什么问题,它应该使用Gfortran运行。检查源代码并确认所有语句都从第七列开始。如果一行有行号,如
1000 continue
中所示,请确保行号在第2-6列中。如果这仍然不起作用,或者源代码格式正确,请在注释中留下一条注释,告诉您学到了什么。
您可以尝试将该文件重命名为dfsynthel.F77并查看其工作原理。源文件中有一些选项卡。将它们替换为空格,您将获得更远的距离。该代码(根据您所介绍的内容)不是有效的Fortran代码。你有理由相信它应该可以由gfortran编译吗?如果没有,您将不得不编辑源代码,以使编译器能够理解它,但在本例中,为了获得建议,最好制作一个完整的示例,我们可以查看(请参阅)。列出的OP语句都是旧的fortran行,并且都写得很好。@jmh,
CLOSE(UNIT=12,DISP='DELETE')
至少不是Fortran。我不认识DISP='DISPLAY'选项,但那可能就是我。其他的线路似乎很好。Fortran已经改变了很多,但是写的行看起来像旧的穿孔卡片Fortran 66。我们知道它的Fortran,因为它使用不同的编译器运行!你看过消息来源了吗?如果不努力删除非标准代码,它将无法使用gfortran编译。@如果可以找到类型
的描述,它是和中存在的状态
记录类型和块大小
的替代品,但gfortran似乎不认识它们。删除RECORDTYPE
和BLOCKSIZE
可以通过gfortran进行编译,但我不确定读/写行为是否会有所不同。很抱歉拆分注释,因为链接太长…@MKK,正如我上面所说的“如果不努力删除非标准代码,它将无法使用gfortran编译。”您不能在打开语句中将类型更改为状态。您需要在此处添加文件='something'
,或者需要将类型='NEW'
更改为状态='SCRATCH'
。但是,它似乎与记录类型
冲突。您现在是否将RECORTYPE='FIXED'
更改为ACCESS='DIRECT'
?请参见jmh答案下的evets评论。这段代码根本不是标准的Fortran。如果设置正确,Gfortran能够处理选项卡。
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)