【问题标题】:Create portable and static fortran linux binary?创建可移植和静态的 fortran linux 二进制文件?
【发布时间】:2018-08-28 08:27:45
【问题描述】:

我正在研究从 Fortran 代码创建可移植静态 Linux 二进制文件的选项(从某种意义上说,二进制文件应该能够在任何新的和相当旧的 Linux 发行版上运行)。如果我理解正确(从 C 推断),可移植性的主要问题是 glibc 是向前但不向后兼容的(即在旧发行版上创建的静态二进制文件将适用于较新的发行版,但反之亦然)。这至少在我迄今为止有限的测试中似乎有效(需要注意的是,在某些情况下,使用 Scratch 文件会导致在较新发行版上运行的段错误)。

似乎至少在 C 中可以通过添加旧的 glibc 标头来避免在旧发行版上进行编译,如

中所述

https://github.com/wheybags/glibc_version_header

此特定方法不适用于 Fortran 代码和编译器,但我想知道是否有人知道类似的方法(或者更具体地说,创建可移植 Fortran 二进制文件可能需要什么,是旧的 glibc 足够还是必须也使用旧的 libfortran 等)?

【问题讨论】:

    标签: linux static binary fortran portability


    【解决方案1】:

    我建议使用 manylinux docker 镜像作为起点。

    简而言之:manylinux 是一个“平台定义”,用于分发在大多数当前 linux 系统上运行的二进制轮子(可能包含已编译代码的 Python 包)。对manylinux的需求及其定义可以找到Python Enhancement Proposal 513

    他们的镜像基于 CentOS 5,包括所有基本的开发工具,包括 gfortran。适合您的流程是(我没有测试,可能需要稍作调整):

    1. https://github.com/pypa/manylinux运行docker镜像
    2. 使用标志-static-libgfortran 编译您的代码

    可能的调整是在他们没有发布静态版本的 libgfortran 的情况下,您可以添加它here

    生成的代码应该可以在大多数当前使用的 linux 系统上运行。

    【讨论】:

    • 感谢您的回答和想法,现在我安装了一个轻型 Alpine Linux VM,它使用 musl libc,与 glibc 相比,它向后和向前兼容。到目前为止,这似乎工作得很好。
    • 您的解决方案似乎也很有趣!
    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2016-02-25
    相关资源
    最近更新 更多