Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
f77文件通过ifort编译,但在使用gfortran时失败_Fortran_Gfortran - Fatal编程技术网

f77文件通过ifort编译,但在使用gfortran时失败

f77文件通过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时在语法上存在一些差异,但我不知道它们到底是什么 我

我正在尝试使用gfortran编译一个f77文件()。 在此之前,我尝试使用ifort by
ifort-double size 64-save-o dfsynthesis.exe dfsynthesis.for
来编译它,结果成功了。 然而,当我尝试使用gfortran by
gfortran-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)