我在使用f77编写的LAPack子程序安装到f90程序时遇到了问题。 Gfortran是编译器。
我知道f77应该是f90的一个子集,但是例如*不被编译器识别为注释的开头。它可识别大部分代码,但会列出大量错误。
我的第一个想法是单独编译程序单元,但我对f77模块一无所知,如果它们存在的话。
你会怎么做呢?
答案 0 :(得分:1)
解决方案是在单个.f文件中包含LAPACK子例程和依赖项(由主程序调用的子程序,由这些程序调用的子程序等)。这个文件不是任何类型的模块或程序单元,它只是一个文本文件,包含所有子程序,没有特定的顺序,一个接一个。
必须小心,因为LAPACK经常错过应该包含它们的.tgz文件中的依赖项。有一个网络,其中讨论了每个子例程,并且可以在其中找到依赖关系图,可在此处找到:http://www.netlib.org/lapack/explore-html/。检查是否存在所有被调用的子程序,如果存在,则将它们全部放在一个文件中以生成更简单的编译命令。另外,更改主代码,以便在主程序中声明和考虑所有参数。每个子程序的参数都在上面的网络中描述,因此它们很容易识别。
如果使用gfortran,请将.f文件编译为.o对象文件。这作为一种包含所有必要子程序的f77模块。它通过以下命令完成:
gfortran -c filename.f
-c表示该文件将被编译为目标文件。重要的是,用FORTRAN 77编写的所有子程序都在一个文件中,该文件与f90中写的所有内容都是分开的。
不需要任何“使用”语句,因为没有使用实际的FORTRAN模块。必要时调用必要的子程序而不必担心这一点。
编译命令将目标文件视为链接库:
gfortran filename.o progname.f90
这个解释非常精确,肯定你们大多数人已经知道这一点,但由于文献中没有明确解释的事情,这是一个需要花费数小时研究的新手问题。这是我自己未来的参考,希望它也能帮助其他初学者。