2

我有一个内部开发的软件。它是用 Fortran 编写的,由 3 种文件组成:1) 求解器文件,2) 模型文件和 3) 定义所用模型的文件。求解器还使用了一些库,即 lapack 和 HSL ma41。通常,我为用户选择所需的模型,一起编译并提供可执行文件。

我希望允许用户添加自己的模型或修改现有模型,而不能更改/修改/查看求解器源代码。

一种想法是将求解器编译成目标文件。然后用户将编译定义文件和他的模型并将它们与库链接在一起。那可能吗?我想那么用户必须与编译求解器的平台相同?(即 Windows 64 位上的英特尔编译器)所以我需要为任何可能的组合操作系统/硬件/编译器构建一个库?

另一个想法是也发送求解器源,但使用混淆。我在网上找不到任何经过测试/可靠的解决方案?这是一个不错的选择吗?

提前致谢。

4

1 回答 1

2

您可以按照您的建议在库中分发目标代码。如果您的代码的入口点在 Fortran 模块中,那么您还需要分发同样由模块编译产生的 mod 文件(或编译器的等效文件)。

(如果您的库代码的任何入口点是外部过程,那么如果您为这些外部过程提供接口块,这对您的用户来说是一种方便。这些接口块可以是源代码形式(接口块不包含超出您的库的文档必须提供),或者可以再次预编译成模块。)

目标代码可以是平台(架构)特定的、编译器特定的、编译器版本特定的,并且在某些情况下是编译选项特定的。仔细设计和规范求解器和客户端模型之间的接口可以减轻一些潜在的变化。例如 - 许多平台都有明确定义的(可能通过显式规范或近乎普遍的约定)C 应用程序二进制接口,因此使用 C 等价物描述的接口通常是健壮的,但代价是公共处理器 Fortran 的能力显着丧失Fortran 接口。

于 2012-09-02T11:39:11.067 回答