Fortran 95编译器能否编译Fortran 77代码?

3

目前,我正在使用gfortran 6.1在Mac上编译Fortran95源代码。我想知道是否可以使用相同的方式运行FORTRAN 77源代码。如果不能,有什么建议吗?


1
除了一些例外情况,有效的Fortran 77程序也是有效的Fortran 95程序。只是非常糟糕地编写的Fortran 95程序。 - francescalus
2个回答

5

您没有提到在编译过程中遇到了什么错误。请参见此链接。具体而言:

    -std=*std*

其中std可能是“f95”、“f2003”、“f2008”、“gnu”或“legacy”之一。默认值为“gnu”。从同一页中得知:“legacy”值相当于没有过时扩展的警告,对于旧的非标准程序可能有用。 “f95”、“f2003”和“f2008”值分别指定严格遵守Fortran 95、Fortran 2003和Fortran 2008标准;所有超出相关语言标准的扩展都会报错,并针对在后续标准中被允许但已过时的Fortran 77功能发出警告。

例如,如果要编译一个名为old_fortran.f77的文件,则可以执行以下操作:

   gfortran -std=legacy old_fortran.f77 -o a.out

使用-o a.out选项可以生成可执行文件a.out。我以前成功地使用过这个编译器的旧版本,而没有使用这个选项。不过你可能会得到一些警告。首先尝试:

   gfortran old_fortran.f77 -o a.out

编辑:在查看下面OP的评论后,似乎涉及到了不同的问题。可能是你的安装有问题(这是可能的),或者你的LD_LIBRARY_PATH出了问题。我认为你的链接器(ld)在你的路径中是32位的,而编译器创建的目标文件可能是64位的。只是一个猜想。你能发布以下输出吗?

  which ld

假设返回值为:/path/to/ld。那么将该输出复制并执行以下操作。
  file /path/to/ld

你可以把这两个命令的输出作为评论发布吗?

我尝试了两种方法,但是得到了相同的错误。ld: 警告:忽略文件 epi.f77,该文件是为不支持的文件格式构建的,而这不是正在链接的架构(x86_64):epi.f77 对于架构 x86_64 未定义符号: “_main”,引用自: 隐式入口/启动主可执行文件 ld: 找不到架构 x86_64 的符号(s) collect2: 错误:ld 返回 1 退出状态 - Vineetha
尝试创建一个小的“Hello World”程序并编译它。如果成功,则您在其他地方有问题。您能告诉我们如何编译epi.F77吗?“file epi.F77”的输出是什么? - Jagte
我尝试了“hello world”,但出现了以下错误。 ld: 警告:忽略文件 hello.f77,该文件是为不支持的文件格式(0x20 0x70 0x72 0x6F 0x67 0x72 0x61 0x6D 0x20 0x6D 0x61 0x69 0x6E 0x0A 0x0A 0x63)构建的,与正在链接的架构(x86_64)不符:hello.f77 未定义符号 x86_64 的体系结构: “_main”,引用自: 隐式入口/启动主可执行文件 ld: 找不到符号(s)x86_64的体系结构 collect2: 错误:ld返回1个退出状态 - Vineetha
@Jagte 我认为修改内容不应该放在这个回答中,因为原始问题没有提及任何类似的内容。绝对不要在问题中向作者提出新问题,只能在评论中提出。 - Vladimir F Героям слава
@Vladimir,我刚刚在 Stackoverflow 文档中查看了你的一个作品。你为这个社区做出了巨大的贡献。无论如何,关于这篇文章,你是正确的。 - Jagte
显示剩余2条评论

2

如果我使用以下命令

gfortran old_fortran.f -o a.out

它是有效的。


那么,你一开始做了什么事情没有成功呢?a.out是默认的,所以你甚至不需要它。 - agentp
1
@agentp 我正在使用之前回答中建议的 old_fortran.f77。 - Vineetha
据我所知,@Vineetha,“.f77”在任何约定中都没有使用。通常的Fortran77扩展名确实是“.f”、“ .for”或“.F”,如果代码需要由C预处理器处理。 - Eenoku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接