fortran - 共享 Fortran 库而不泄露源代码

标签 fortran shared-libraries static-libraries obfuscation

我有一个内部开发的软件。它是用 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/

相关文章:

c++ - 如何读取C++和VTK在Fortran中生成的二进制structured_points数据文件?

c# - 管理源代码的方法

Linux 中synch.h 的等效 header

c++ - 链接两个静态库

linker - XCode5 链接 Testflight SDK 库

linker - Xamarin.iOS 链接器为临时删除 i386

linux - 我在哪里可以获得在 redhat linux 上安装 f2c 的文件?

c++ - 有没有接近C/C++又容易自动并行化的语言?

c++ - Fortran C++ 链接库

linker - 静态链接不适用于节点模块