首页 > 解决方案 > 创建可移植和静态的 fortran linux 二进制文件?

问题描述

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

似乎至少在 C 语言中,人们可以通过添加遗留 glibc 头文件来避免在旧发行版上编译,如中所述

https://github.com/wheybags/glibc_version_header

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

标签: linuxstaticbinaryfortranportability

解决方案


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

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

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

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

可能的调整是在他们不发布静态版本的 libgfortran 的情况下,您可以在此处添加它。

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


推荐阅读