【问题标题】:Can Fortran 95 compiler compile Fortran 77 code?Fortran 95 编译器可以编译 Fortran 77 代码吗?
【发布时间】:2016-06-21 21:22:23
【问题描述】:

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

【问题讨论】:

  • 除了少数例外,有效的 Fortran 77 程序是有效的 Fortran 95 程序。只是写得很糟糕的 Fortran 95 程序。

标签: fortran gfortran fortran77 fortran95


【解决方案1】:

你没有提到你在编译过程中遇到了什么错误。见this link。具体来说:

    -std=*std*

其中 std 可能是“f95”、“f2003”、“f2008”、“gnu”或“legacy”之一。

std 的默认值为‘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 查看下面的 cmets 后,看起来可能涉及不同的问题。可能是您的安装有问题(这是可能的)或者您的 LD_LIBRARY_PATH 搞砸了。我认为路径中的链接器(ld)是 32 位的,而编译器创建的目标文件可能是 64 位的。只是一种预感。你能发布输出的

  which ld

假设返回:/path/to/ld。然后获取该输出并执行

  file /path/to/ld

您可以将两个命令的输出作为评论发布吗?

【讨论】:

  • 谢谢。我对fortran编程很陌生,所以现在不太了解技术词汇。将等待更多细节。
  • 我尝试了两种方法,得到了同样的错误。 ld:警告:忽略文件epi.f77,文件是为不受支持的文件格式构建的,它不是被链接的架构(x86_64):epi.f77架构x86_64的未定义符号:“_main”,引用自:main的隐式条目/开始可执行 ld:未找到架构 x86_64 collect2 的符号:错误:ld 返回 1 个退出状态
  • 尝试创建一个小的“Hello World”程序并编译它。如果它成功了,那么你在其他地方就有问题了。你能告诉我们你是如何编译epi.F77的吗? “文件epi.F77”的输出是什么
  • 我尝试了“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 的隐式入口/启动:未找到架构 x86_64 的符号 collect2:错误:ld 返回 1 个退出状态
  • @Vineetha 这应该是问题所在。但也许你应该问一个新问题,因为这个问题已经有了答案。
【解决方案2】:

如果我使用它就可以工作

gfortran old_fortran.f -o a.out

【讨论】:

  • 那么你一开始做了什么没用? a.out 是默认的,所以你甚至不需要它。
  • @agentp 我正在使用 old_fortran.f77,如上一个答案中所建议的那样。
  • @Vineetha .f77 不被任何约定使用,AFAIK。如果代码需要由 C 预处理器处理,通常的 Fortran77 扩展名确实是 .f.for.F
猜你喜欢
  • 1970-01-01
  • 2016-04-10
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
相关资源
最近更新 更多