Fortran 95编译器可以编译Fortran 77代码吗?
目前我正在mac上使用gfortran 6.1编译fortran95源代码。我想知道我是否可以用同样的方法运行FORTRAN 77源代码。如果没有,有什么建议吗?您没有提到在编译过程中遇到的错误。看见具体而言:Fortran 95编译器可以编译Fortran 77代码吗?,fortran,gfortran,fortran77,fortran95,Fortran,Gfortran,Fortran77,Fortran95,目前我正在mac上使用gfortran 6.1编译fortran95源代码。我想知道我是否可以用同样的方法运行FORTRAN 77源代码。如果没有,有什么建议吗?您没有提到在编译过程中遇到的错误。看见具体而言: -std=*std* 其中std可以是“f95”、“f2003”、“f2008”、“gnu”或“遗留”中的一种。 std的默认值为“gnu”。从同一页: “legacy”值是等效的,但没有过时扩展的警告,并且可能对旧的非标准程序有用。“f95”、“f2003”和“f2008”值
-std=*std*
其中std可以是“f95”、“f2003”、“f2008”、“gnu”或“遗留”中的一种。
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
其中-oa.out
提供可执行文件a.out
。我已成功使用了此编译器的旧版本,但未使用此选项。不过,您可能会收到一些警告。第一次尝试:
gfortran old_fortran.f77 -o a.out
编辑:在OP看了下面的评论后,看起来可能涉及到不同的问题。可能是您的安装有故障(这是可能的),或者您的LD\u LIBRARY\u路径有问题。我认为路径中的链接器(ld)是32位的,而编译器创建的对象文件可能是64位的。只是一种预感。你能把你的结果贴出来吗
which ld
假设返回:/path/to/ld。然后获取输出并执行以下操作
file /path/to/ld
您能将这两个命令的输出都作为注释发布吗?如果我使用
gfortran old_fortran.f-o a.out
谢谢我对fortran编程非常陌生,所以现在不太懂技术术语。将等待更多详细信息。我尝试了两种方法,得到了相同的错误。ld:警告:忽略文件epi.f77,该文件是为不受支持的文件格式生成的,该文件格式不是要链接的体系结构(x86_64):epi.f77体系结构x86_64的未定义符号:“_main”,引用自:主可执行文件ld:symbol的隐式输入/启动找不到架构x86_64 collect2:错误:ld返回1退出状态尝试创建一个小的“Hello World”程序并编译它。如果成功了,那么你在其他地方就有问题了。您能告诉我们您是如何编译epi.F77的吗?“file 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的未定义符号:“\u main”,引用自:未找到架构x86_64 collect2的主可执行文件ld:symbol的隐式条目/启动:错误:ld返回1退出status@Vineetha这应该是个问题。但也许你应该问一个新问题,因为这个问题已经有了答案。除了少数例外,有效的Fortran 77程序是有效的Fortran 95程序。只是写得很糟糕的Fortran 95程序。那么你一开始做了什么不起作用的事情呢?a、 out是默认值,所以您甚至不需要它。@agentp I wa使用旧的fortran.f77,如前一个答案中所建议的那样。@Vineetha.f77
不被任何约定使用,好的。如果代码需要由C预处理器处理,通常的Fortran77扩展实际上是.f
、.for
或.f
。