用Fortran 90代码编写Fortran 77子程序

用Fortran 90代码编写Fortran 77子程序,fortran,fortran90,gfortran,fortran77,Fortran,Fortran90,Gfortran,Fortran77,我在将用f77编写的LAPack子程序安装到f90程序中时遇到问题。Gfortran是编译器 我知道f77应该是f90的一个子集,但例如,编译器不会将*识别为注释的开头。它可以识别大部分代码,但给出了大量错误列表 我的第一个想法是单独编译程序单元,但我对f77模块一无所知,如果它们存在的话 如何执行此操作?解决方案是在单个.f文件中包含LAPACK子例程和依赖项(由主程序调用的子例程、由这些程序调用的子例程等)。这个文件不是任何类型的模块或程序单元,它只是一个文本文件,包含所有子程序,没有特定顺

我在将用f77编写的LAPack子程序安装到f90程序中时遇到问题。Gfortran是编译器

我知道f77应该是f90的一个子集,但例如,编译器不会将*识别为注释的开头。它可以识别大部分代码,但给出了大量错误列表

我的第一个想法是单独编译程序单元,但我对f77模块一无所知,如果它们存在的话


如何执行此操作?

解决方案是在单个.f文件中包含LAPACK子例程和依赖项(由主程序调用的子例程、由这些程序调用的子例程等)。这个文件不是任何类型的模块或程序单元,它只是一个文本文件,包含所有子程序,没有特定顺序,一个接一个

必须小心,因为LAPACK经常会丢失.tgz文件中应该包含它们的依赖项。有一个网络,其中讨论了每个子例程,并且可以在这里找到依赖关系的映射:。检查是否存在所有被调用的子例程,如果存在,则将它们全部放在一个文件中,以简化编译命令。另外,修改主代码,以便在主程序中声明和考虑所有参数。每个子程序的参数都在上述网络中描述,因此它们很容易识别

如果使用gfortran,请将.f文件编译为.o对象文件。这相当于一种f77模块,其中包含所有必要的子例程。通过以下命令执行此操作:

gfortran -c filename.f
-c表示该文件将被编译为对象文件。重要的是,所有用FORTRAN 77编写的子例程都应保存在一个独立于f90编写的所有子程序的文件中

不需要任何“use”语句,因为没有使用实际的FORTRAN模块。必要时调用必要的子例程,无需担心这一点

编译命令将对象文件视为链接库:

gfortran filename.o progname.f90

这个解释是非常精炼的,当然你们中的大多数人已经知道了,但这是一个新手问题,由于文献中没有明确解释,它花费了许多小时的研究。这是我自己将来的参考,希望它也能帮助其他初学者。

我应该在原始帖子中指出,当子程序包含在.f90程序中时,行首的*之类的东西是无法识别的。您应该包括错误消息,编译命令和一小部分相关代码。编译命令与往常一样:gfortran progname.f90。给定编译器的错误主要是语法错误。代码太多了,我看不出我能包含哪些有用的东西。想象一下,f77中有一个普通的f90程序和子例程。Fortran 77代码不能在.f90文件中。固定源表单文件使用.f或.for。你不能在一个文件中混合使用固定源代码和自由源代码。我很困惑。拉帕克在90年前被改写成Fortran。你为什么要用老资料?