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
使用模块文件分发编译的fortran库_Fortran - Fatal编程技术网

使用模块文件分发编译的fortran库

使用模块文件分发编译的fortran库,fortran,Fortran,我有一个Fortran库,它使用了很多模块。我在Windows上使用ifort编译器。因此,我得到了库的*.lib文件和所用模块的*.mod文件 这样做的缺点是,如果我想在另一个程序中使用编译后的库,我还必须分发*.mod文件。如何防止这种情况?我认为有两种可能性: 创建一个接口,其中定义了用于调用库模块内的函数或过程的函数。因此,我只需要提供定义接口的文件 使用函数定义中的bind(c)从库外部使用的所有模块函数和过程的c接口和导出名称。然后我可以用一个类似c的头文件来分发这个库 还有其他的可

我有一个
Fortran
库,它使用了很多模块。我在Windows上使用
ifort
编译器。因此,我得到了库的
*.lib
文件和所用模块的
*.mod
文件

这样做的缺点是,如果我想在另一个程序中使用编译后的库,我还必须分发
*.mod
文件。如何防止这种情况?我认为有两种可能性:

  • 创建一个接口,其中定义了用于调用库模块内的函数或过程的函数。因此,我只需要提供定义接口的文件
  • 使用函数定义中的
    bind(c)
    从库外部使用的所有模块函数和过程的c接口和导出名称。然后我可以用一个类似c的头文件来分发这个库

  • 还有其他的可能性吗?分发使用模块的编译fortran库的最佳实践是什么?

    我认为,如果从fortran调用
    .mod
    文件,那么分发
    .mod
    文件是最容易的。如果要从其他语言调用它,您仍然需要C接口


    糟糕的是失去了Fortran显式接口。对于选项1,如果您提供带有接口块的include文件,您可能仍然可以使用它,但仅提供
    .mod
    文件更好。

    通过“分发”,您是指您自己的其他程序还是其他人?如果是对您自己,那么您应该能够将.mod文件放在搜索路径上。如果分发给其他人,另一种解决方案是以源代码的形式分发库。这可能会容易得多,因为您不必担心编译器版本。以编译的形式分发有什么必要?我不是代码的所有者,所以我不能分发源代码。我必须将编译后的库提供给第三方。我不知道我失去了C选项的显式接口+1.我同意提供国防部是最好的。注意,这些选项并不是相互排斥的-您还可以为绑定(C)过程提供接口块(事实上…您必须!)-您不必丢失显式接口。BIND(C)的问题是,您在什么可以是伪参数或函数结果方面受到很大限制(所有参数都必须是非可选的和可互操作的,等等)。如果提供了接口块,那么最好将它们作为源代码提供在模块中。