我有一个内部开发的软件。它是用 Fortran 编写的,由 3 种文件组成:1) 求解器文件,2) 模型文件和 3) 定义所用模型的文件。该求解器还使用一些库,即 lapack 和 HSL ma41。通常,我为用户选择所需的模型,一起编译并提供可执行文件。
我希望允许用户添加自己的模型或修改现有模型,而无法更改/修改/查看求解器源代码。
一个想法是将求解器编译成目标文件。然后用户将编译定义文件和他的模型并将它们与库链接在一起。那可能吗?我猜想用户必须拥有与编译解算器的平台相同的平台? (即 Windows 64 位上的英特尔编译器)所以我需要为任何可能的操作系统/硬件/编译器组合构建一个库?
另一个想法是也发送求解器源,但使用混淆。我在网上找不到任何经过测试/可靠的解决方案?这是一个好的选择吗?
提前致谢。
最佳答案
您可以按照您的建议在库中分发目标代码。如果代码的入口点位于 Fortran 模块中,那么您还需要分发同样由模块编译产生的 mod 文件(或编译器的等效文件)。
(如果您的库代码的任何入口点是外部过程,那么如果您为这些外部过程提供接口(interface) block ,这对您的用户来说会很方便。这些接口(interface) block 可以是源代码形式(接口(interface) block 不包含任何信息)超出了您的库的文档必须提供的内容),或者可以再次预编译到模块中。)
目标代码可能是特定于平台(体系结构)、特定于编译器、特定于编译器版本的,并且在某些情况下特定于编译选项的。仔细设计和规范求解器与客户端模型之间的接口(interface)可以减轻一些潜在的变化。例如,许多平台都有一个明确定义的(可能通过显式规范或近乎普遍的约定)C 应用程序二进制接口(interface),因此使用 C 等效项描述的接口(interface)通常是稳健的,但代价是与通用处理器 Fortran 相比,功能显着损失Fortran 接口(interface)。
关于fortran - 共享 Fortran 库而不泄露源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214973/