使用模块文件分发编译的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)的问题是,您在什么可以是伪参数或函数结果方面受到很大限制(所有参数都必须是非可选的和可互操作的,等等)。如果提供了接口块,那么最好将它们作为源代码提供在模块中。