Linker 如何在Fortran95中链接主程序和子程序?

Linker 如何在Fortran95中链接主程序和子程序?,linker,fortran,object-files,Linker,Fortran,Object Files,如何将外部子程序链接到Fortran中的主程序? 尽管如此,我还是从这本书名为《科学家和工程师用Fortran 90》的书中得到了答案 详情如下: 还要注意,由于外部子程序驻留在单独的 来自主程序的文件,必须单独编译。在下面 FTN90一种中间类型的机器代码,称为可重定位二进制代码 在扩展名为.OBJ的文件中生成。这反过来也必须是正确的 通过一个称为 链接器,最终生成一个.EXE版本的主程序。你的 编译器手册将详细介绍如何执行此操作。一旦是 最后调试,外部子程序永远不需要重新编译, 仅链接。这样

如何将外部子程序链接到Fortran中的主程序? 尽管如此,我还是从这本书名为《科学家和工程师用Fortran 90》的书中得到了答案 详情如下:

还要注意,由于外部子程序驻留在单独的 来自主程序的文件,必须单独编译。在下面 FTN90一种中间类型的机器代码,称为可重定位二进制代码 在扩展名为.OBJ的文件中生成。这反过来也必须是正确的 通过一个称为 链接器,最终生成一个.EXE版本的主程序。你的 编译器手册将详细介绍如何执行此操作。一旦是 最后调试,外部子程序永远不需要重新编译, 仅链接。这样可以避免在重新编译时浪费时间 如果它是一个内部子程序,情况就是这样


无论如何,我没有找到任何关于如何链接主程序和子程序的手册。我使用Silverfrost(柏拉图)来调试和运行程序。此外,我已在系统上安装了“英特尔并行工作室XE 2011”。

目前,我将假定外部子程序(函数或子程序)与主程序位于同一目录中。在fortran77或更早版本中,您只需从主程序调用子例程,并将它们与主程序和子程序中存在的公共语句链接。但是,现在首选的方法是将外部子程序写入模块,并使用USE语句链接模块。例如,让我们组成一个虚构的子程序,读入一个值“x”,并对其进行处理,以将“y”和“z”的值反馈给主程序。程序和模块可能与下面的示例类似。本质上,一个模块i fortran试图变得有点面向对象,因为它确保数据被封装到程序中,并且除非程序员希望数据是全局的,否则不能全局访问。如果子程序只能由模块中的其他程序调用,则程序员必须将其声明为私有子程序,如果子程序要由主程序调用,则必须将其声明为公共子程序。此外,为了确保正确使用数据,如果变量仅输入例程、输出例程或将调用例程、处理并反馈给主程序,则应将其声明为INTENT(in)、INTENT(OUT)或INTENT(INOUT)。我希望这有帮助,如果你不想问其他问题的话。此外,在编译带有外部子程序的主程序时,也要按子程序的顺序调用它们。这意味着不要使用ifort main.f90 module.f90,而是必须键入fort module.f90 main.f90(假设您使用的是英特尔编译器),否则,请使用编译器使用的任何命令替换fort

   PROGRAM MAIN
   USE Test
   IMPLICIT NONE
   REAL :: X,Y,Z
   X = 5.0
   WRITE(*,*) X,Y,Z
   END PROGRAM MAIN

   MODULE Test
   PUBLIC :: Subroutine_Example
   CONTAINS 

   SUBROUTINE Subroutine_Example(X,Y,Z)
   REAL, INTENT(IN) :: X
   REAL, INTENT(OUT :: Y,Z
   Y = X + 34.6
   Z = X - 1.4
   END Subroutine_Example
   END MODULE Test

你有没有试着在所有文件上调用你的编译器
compilername file1.obj file2.obj
?实际上我不知道如何调用。obj file@VladimirF,但现在我找到了一种方法。现在,我使用intel parallel studio同时运行程序和子例程。他们成功了。但是,我认为我所发现的方式似乎不是一种标准和普通的方式。我猜Intel parallel studio会把它们联系起来。这是真的还是假的?你到底是怎么做到的?请注意,Studio之间存在差异(仅限于您看到的窗口)和实际的编译器。过程如下:1-打开Microsoft Visual Studio 2-文件>新建项目>FTN95应用程序3-在解决方案资源管理器上有两个文件夹,包括:包含文件和源文件4-我在源文件夹下编写了主程序,在包含文件夹5中编写了子例程-编写完后,我们应该开始调试我建议您从命令行工具开始,并在了解了发生的事情后转移到IDE。就我的2美分。谢谢。这真的很有用。再次感谢。另外,我还想补充一点,现在人们认为最好的做法是找到主要使用函数而不是子程序编程的方法。使用函数有助于防止重写主程序和子程序均可访问的变量。但是,函数只返回一个变量或一个数据数组,因此主要使用函数进行编程需要事先考虑。