Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 是否可以将模块保存为库,以避免其在每个程序代码中永久复制和过时_Module_Fortran - Fatal编程技术网

Module 是否可以将模块保存为库,以避免其在每个程序代码中永久复制和过时

Module 是否可以将模块保存为库,以避免其在每个程序代码中永久复制和过时,module,fortran,Module,Fortran,我已经编写了一个模块,其中包括我需要的所有必要的子程序和函数。此模块是一个通用模块,我想知道是否有任何方法可以避免永久使用该模块的完整代码版本,而将其称为Fortran库或内部保存的模块?您可以以下方式使用该模块。如果您构建模块的代码,例如,该模块称为capsule,并且有一个名为sub的子例程,则会生成文件“capsule.mod”。现在,您可以通过以下方式在另一个项目中使用此模块: 将capsule.mod添加到链接器应该使用的文件列表中,或者如果使用ide,只需将该文件复制到所有objec

我已经编写了一个模块,其中包括我需要的所有必要的子程序和函数。此模块是一个通用模块,我想知道是否有任何方法可以避免永久使用该模块的完整代码版本,而将其称为Fortran库或内部保存的模块?

您可以以下方式使用该模块。如果您构建模块的代码,例如,该模块称为capsule,并且有一个名为sub的子例程,则会生成文件“capsule.mod”。现在,您可以通过以下方式在另一个项目中使用此模块:

  • 将capsule.mod添加到链接器应该使用的文件列表中,或者如果使用ide,只需将该文件复制到所有objectcode文件所在的文件夹中即可
  • 使用命令

    use capsule
    
    在子例程、函数或主程序中,要使用模块的子例程

  • 调用子例程

    call sub()
    
  • 您已经重复使用了曾经构建的文件capsule.mod


    编辑:我指的是编译器,模块必须对编译器可见,而不是对链接器可见。

    您可以按以下方式使用模块。如果您构建模块的代码,例如,该模块称为capsule,并且有一个名为sub的子例程,则会生成文件“capsule.mod”。现在,您可以通过以下方式在另一个项目中使用此模块:

  • 将capsule.mod添加到链接器应该使用的文件列表中,或者如果使用ide,只需将该文件复制到所有objectcode文件所在的文件夹中即可
  • 使用命令

    use capsule
    
    在子例程、函数或主程序中,要使用模块的子例程

  • 调用子例程

    call sub()
    
  • 您已经重复使用了曾经构建的文件capsule.mod


    编辑:我指的是编译器,模块必须对编译器可见,而不是对链接器可见。

    或者,您可能希望将通用例程编译为共享库或DLL。这篇文章提供了gfortran和unix-y系统的一个最小示例;Windows上英特尔Fortran的一个例子是。我听说gfortran可以在Windows上使用
    -shared
    标志生成DLL,但我会非常小心地使用该方法。

    或者,您可能希望将通用例程编译为共享库或DLL。这篇文章提供了gfortran和unix-y系统的一个最小示例;Windows上英特尔Fortran的一个例子是。我曾听说gfortran可以使用
    -shared
    标志在Windows上生成DLL,但我会非常小心。链接器通常对某些Fortran编译器生成的.mod文件一无所知。链接器使用目标代码。链接器通常对某些Fortran编译器生成的.mod文件一无所知。链接器使用目标代码。正如Alex提到的。。。使用,然后你得到一些界面检查。同意;不清楚目标是链接到预编译模块还是共享库。模块的一个缺点是
    .mod
    文件不能跨编译器移植(即,使用ifort构建的文件不能与使用gfrotran构建的代码一起工作)。共享库(
    .so
    .dll
    )应该避免这个问题,但代价是不进行接口检查和增加编译的复杂性。权衡…正如Alex提到的。。。使用,然后你得到一些界面检查。同意;不清楚目标是链接到预编译模块还是共享库。模块的一个缺点是
    .mod
    文件不能跨编译器移植(即,使用ifort构建的文件不能与使用gfrotran构建的代码一起工作)。共享库(
    .so
    .dll
    )应该避免这个问题,但代价是不进行接口检查和增加编译的复杂性。权衡。。。