我希望能够在不共享源代码的情况下共享FORTRAN 95模块。是否可以这样做(可能是通过共享.MOD文件)?如果这是相关的,我在Plato上使用Silverfrost FTN95编译器。到目前为止,我只能通过使用外部模块的源代码来完成这项工作。这是一个例子:
file:module_test.f95
module TEST
contains
subroutine 1
code...
end module TEST
file: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吗?
非常感谢!
答案 0 :(得分:5)
你可以提供两件事。 1)编译的目标代码,可能是库形式。缺点是这将取决于编译器,操作系统,可能是编译器版本,因此可能是支持的大负担。 2)您可以编写例程的等效接口描述,而不是提供源代码,以便其他人可以use
模块。这至少是源代码级别,不依赖于编译器。如果您更改了任何程序的参数,那么编写一些工作就可以进行维护。
答案 1 :(得分:0)
正如M. S. B.推荐的那样,我正在使用的解决方案是以库的形式编译模块。我明确地告诉我这样做是为了这可能对某人有帮助,因为这是我当时不知道的。
首先,需要编译模块module_test.f95
。使用gfortran
编译器,可以通过命令gfortran -c module_test.f95
来完成。这将创建两个文件module_test.o
和module_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
与项目位于同一文件夹中)。这将使用模块编译主程序,而无需其源代码。