3

我希望能够共享 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 吗?

非常感谢!

4

2 回答 2

5

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

于 2013-08-29T22:26:44.427 回答
0

正如 MSB 推荐的那样,我使用的解决方案是以库形式编译模块。我明确地展示了我是如何做到这一点的,以防这可能对某人有所帮助,因为这是我当时所不知道的。

首先,需要编译模块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与项目位于同一文件夹中)。这将使用模块编译主程序,而不需要其源代码。

于 2017-06-29T11:27:13.770 回答