【问题标题】:FORTRAN 95: is it possible to share a module without sharing the source code?FORTRAN 95:是否可以在不共享源代码的情况下共享模块?
【发布时间】:2013-08-29 21:42:10
【问题描述】:

我希望能够共享 FORTRAN 95 模块而不共享其源代码。是否可以这样做(也许通过共享 .MOD 文件)?如果这是相关的,我在 Plato 上使用 Silverfrost FTN95 编译器。到目前为止,我只能通过使用外部模块的源代码来完成这项工作。这是一个例子:


文件:module_test.f95

module TEST
contains

  subroutine 1
  code...

end module TEST

文件:main_program.f95

include "module_test.f95"
program MAIN_PROGRAM
use TEST
implicit none

code...

end program MAIN_PROGRAM

那么,有人可以在没有我的文件 module_test.f95 或主代码上的 include "module_test.f95" 行的情况下使用我的模块 TEST 吗?

非常感谢!

【问题讨论】:

    标签: module fortran fortran95


    【解决方案1】:

    你可以提供两件事。 1) 编译的目标代码,可能是库形式。缺点是这将取决于编译器、操作系统,也许是编译器版本,因此可能是很大的支持负担。 2)您可以编写例程的等效接口描述,而不是提供源代码以便其他人可以use 模块。至少,这在源代码级别,并且不依赖于编译器。如果您更改任何过程的参数,它会编写一些工作并且必须维护。

    【讨论】:

    • 首先非常感谢您的回答。关于 1),依赖编译器和操作系统是有问题的。关于 2),我对 FORTRAN 中的 INTERFACE 语句不是很熟悉。能否请您使用上面的示例向我展示如何做到这一点?
    • stackoverflow.com/questions/18402775/share-allocatable-arrays 有一个例子。程序 TestArray 有一个描述函数 MySum 的接口块。 MySum 函数可以对象形式提供,无需源代码(与示例不同),编译器在处理 TestArray 时,由于接口提供的描述,仍然会知道 MySum 的调用和返回属性。
    • 这些接口可以放在一个接口模块中,用户只需编译使用即可。
    【解决方案2】:

    按照 M. S. B. 的建议,我使用的解决方案是以库形式编译模块。我明确地展示了我是如何做到这一点的,以防这可能对某人有所帮助,因为这是我当时所不知道的。

    首先,需要编译模块module_test.f95。使用gfortran 编译器,这可以通过命令gfortran -c module_test.f95 来完成。这将创建两个文件,module_test.omodule_test.mod。这些是编译后的模块文件,可以在不共享源代码的情况下共享。

    现在进入主程序。要使用该模块,仍然需要添加use TEST 这一行,但不需要添加include <source code>

    program MAIN_PROGRAM
    use TEST
    implicit none
    
    <...code...>
    
    end program MAIN_PROGRAM
    

    现在在编译主程序时,必须在命令中包含.o 模块文件的位置。在上述情况下,它将是 gfortran main_program.f95 module_test.o(假设 module_test.o 与项目位于同一文件夹中)。这将使用模块编译主程序,而不需要其源代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2015-02-07
      • 2021-09-12
      • 1970-01-01
      • 2017-12-14
      • 2010-09-21
      相关资源
      最近更新 更多