Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
Linux 在现代编译器中编译狡猾的Fortran 77代码_Linux_Ubuntu_Fortran - Fatal编程技术网

Linux 在现代编译器中编译狡猾的Fortran 77代码

Linux 在现代编译器中编译狡猾的Fortran 77代码,linux,ubuntu,fortran,Linux,Ubuntu,Fortran,我正在尝试编译一个用Fortran 77编写的软件。我应该指出,我对Fortran不太了解,我真的不想开始修改这个软件的代码——特别是因为我不确定这个软件的许可是什么,我也不知道我是否能够重新发布修改后的版本 该代码在OSX和Windows上使用g77编译器(相当容易)进行良好编译,该编译器可用于这些系统。然而,我无法让它在我的Ubuntu发行版上运行,因为我似乎再也无法获得g77的Ubuntu版本,如果我尝试安装它的旧版本,它似乎会把我的整个GCC安装搞得一团糟。我曾尝试使用gfortran和

我正在尝试编译一个用Fortran 77编写的软件。我应该指出,我对Fortran不太了解,我真的不想开始修改这个软件的代码——特别是因为我不确定这个软件的许可是什么,我也不知道我是否能够重新发布修改后的版本

该代码在OSX和Windows上使用g77编译器(相当容易)进行良好编译,该编译器可用于这些系统。然而,我无法让它在我的Ubuntu发行版上运行,因为我似乎再也无法获得g77的Ubuntu版本,如果我尝试安装它的旧版本,它似乎会把我的整个GCC安装搞得一团糟。我曾尝试使用gfortran和g95编译代码,但这两种语言都不适用:

  • 代码使用实变量作为循环索引(是的,我知道,这是个坏主意)。g95通过
    -freal loops
    选项支持这一点,但gfortran不支持
  • 代码使用实变量索引到数组中,gfortran将支持数组(带有警告),但g95不支持数组

有谁能建议一种方法,使用g95或gfortran等现代且易于使用的编译器,使用这两个“不可靠”功能编译此代码吗?

将参数
-std=legacy
传递给gfortran。在F95中删除的功能,如实循环和数组索引,应该在传统模式下编译(可能带有警告)。

您可以尝试添加
-std=legacy
,但我不知道它是否有效。有关更多详细信息,请参阅。根据Dan的建议,我使用gfortran尝试了-std=legacy。使用实数变量作为循环索引和数组索引被接受,没有错误消息,程序正常运行。为什么要尝试重新分发您承认没有编写并且没有所述代码的许可证的代码?实际上,使用
实数
双精度
变量作为循环索引和下标是完全安全的。是的,我知道很多人会说这是一个糟糕的想法,但他们错了。整数值的FP计算是精确的。那些意识到小数通常是不精确的,而不了解确切原因的人常常错误地认为整数值也会出现同样的问题。JavaScript实现者知道这一点,并对整数使用了
double
。看@DigitalRoss,这根本不是真的。32位IEEE 754的尾数为23位,整数部分为24位,隐式
1
。这将精确表示整数的范围限制为
[0,2^24-1]
,该范围小于32位
int
的完整范围(在该范围之上还有其他精确表示整数,但它们不是连续的)。通过双精度,该范围扩展到
[0,2^53-1]
——小于
长的整个范围。