我有一个内部开发的软件。它是用Fortran编写的,由3种文件组成:1)求解器文件,2)模型文件和3)定义模型的文件。求解器还使用了一些库,即lapack和HSL ma41。通常,我为用户选择所需的模型,一起编译并提供可执行文件。
我想允许用户添加自己的模型或修改现有模型,而无法更改/修改/查看解算器源代码。
一种想法是将解算器编译成目标文件。然后,用户将编译定义文件及其模型,并将它们与库链接在一起。那可能吗?我想用户必须拥有与编译解算器相同的平台? (即Windows 64位上的英特尔编译器)所以我需要为任何可能的OS /硬件/编译器组合构建一个库吗?
另一个想法是发送求解器源但使用混淆。我在网上找不到任何经过测试/可靠的解决方案?这是一个不错的选择吗?
提前致谢。
答案 0 :(得分:2)
您可以按照建议在库中分发目标代码。如果您的代码的入口点在Fortran模块中,那么您还需要分发mod文件(或编译器的等效文件),这些文件也是模块编译的结果。
(如果您的库代码的任何入口点是外部过程,那么如果您为这些外部过程提供接口块,则为您的用户提供便利。这些接口块可以是源代码形式(接口块不包含任何信息)超出您的图书馆文档必须提供的内容),或者可以再次预编译到模块中。)
对象代码可以是特定于平台(体系结构),特定于编译器,特定于编译器版本,在某些情况下特定于编译选项。仔细设计和规划求解器与客户模型之间的接口可以减轻一些潜在的变化。例如,许多平台都有很好的定义(可能是通过显式规范或接近无处不在的约定)C应用程序二进制接口,因此使用C等价物描述的接口通常是健壮的,代价是相对于通用处理器Fortran而言,性能显着下降。 Fortran界面。