【问题标题】:Static Linking in FortranFortran 中的静态链接
【发布时间】:2011-10-13 14:07:17
【问题描述】:

我开发了一个用 C++ 编写的模块,用于管理我公司产品的许可证。为了防止 DLL 替换,我们的目标是在解决方案中静态链接 DLL。这在 C++ 中很容易做到,但对于我们用 Fortran 编写的部分代码库来说,这会有点问题。

我意识到这可能因编译器而异(我们使用英特尔 Fortran 9.1),但有没有通用的方法在 Fortran 中实现 C++ DLL 的静态链接?

【问题讨论】:

  • 您不能静态链接 DLL。您要么需要链接一个 lib 文件(DLL 的静态库版本),要么需要链接用于构建 DLL 的目标文件。

标签: c++ dll fortran static-linking


【解决方案1】:

要获得静态链接,通常的方法不是使用 DLL,而是使用简单的库 (*.lib)。这与编程语言无关:它只取决于操作系统。

构建库也比构建 DLL 更简单。在 Unix 上,库的后缀为 .a,而 DLL 的后缀为 .so(用于共享对象)。

尽管如此,通常可以静态链接 DLL,但这是通过传递给链接器的特定选项获得的。例如在 Unix 上,有许多编译器套件,选项是 -static 或 -Bstatic。查看编译器编程手册中的关键字“static”。

【讨论】:

    【解决方案2】:

    如果您可以访问源代码,只需将其编译为目标文件并将它们链接到您的 Fortran 项目。 ISO_C_BINDING 应该适用于许多编译器。

    【讨论】:

    • 另外,在 Windows 上使用 dumpbin 或在 Linux 上使用 objdump 来查看二进制文件的符号表。这将告诉您是否存在名称修改问题。使用现代编译器,我认为这应该不是问题。
    • 您能进一步扩展吗?我是一个完整的 Fortran 新手。
    • Fortran ISO_C_BINDING 允许您准确指定例程名称并克服名称混淆问题。
    猜你喜欢
    • 2016-05-20
    • 2012-02-03
    • 1970-01-01
    • 2021-10-20
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多