创建可移植和静态的 fortran linux 二进制文件?
Create portable and static fortran linux binary?
我正在研究从 Fortran 代码创建可移植静态 Linux 二进制文件的选项(从某种意义上说,二进制文件应该能够 运行 在任何新的和相当旧的 Linux 发行版)。如果我理解正确(从 C 推断),可移植性的主要问题是 glibc 向前兼容但不向后兼容(即在旧发行版上创建的静态二进制文件将在新发行版上运行,但反之亦然)。这至少在我迄今为止有限的测试中似乎有效(有一个警告,使用 Scratch 文件会导致段错误 运行在某些情况下在较新的发行版上)。
至少在 C 中似乎可以通过添加遗留 glibc headers 来避免在旧发行版上进行编译,如
中所述
https://github.com/wheybags/glibc_version_header
此特定方法不适用于 Fortran 代码和编译器,但我想知道是否有人知道类似的方法(或更具体地说,创建可移植的 Fortran 二进制文件可能需要什么,旧的 glibc 是否足够或还必须使用旧的 libfortran 等)吗?
我建议使用许多linux docker 图像作为起点。
简而言之:许多 linux 是一个 "platform definition" 用于分发二进制轮(Python 可能包含编译代码的包),运行 在最新的 [=34] =] 系统。需要 manylinux 及其定义可以找到 Python Enhancement Proposal 513
他们的镜像基于 CentOS 5,包括所有基本的开发工具,包括 gfortran。您的流程是(我没有测试,可能需要稍作调整):
- 运行 来自 https://github.com/pypa/manylinux
的 docker 图片
- 使用标志
-static-libgfortran
编译您的代码
可能的调整是在他们不提供 libgfortran 的静态版本的情况下,在这种情况下您可以添加它 here。
在大多数当前使用的 linux 系统上,生成的代码应该 运行。
我正在研究从 Fortran 代码创建可移植静态 Linux 二进制文件的选项(从某种意义上说,二进制文件应该能够 运行 在任何新的和相当旧的 Linux 发行版)。如果我理解正确(从 C 推断),可移植性的主要问题是 glibc 向前兼容但不向后兼容(即在旧发行版上创建的静态二进制文件将在新发行版上运行,但反之亦然)。这至少在我迄今为止有限的测试中似乎有效(有一个警告,使用 Scratch 文件会导致段错误 运行在某些情况下在较新的发行版上)。
至少在 C 中似乎可以通过添加遗留 glibc headers 来避免在旧发行版上进行编译,如
中所述https://github.com/wheybags/glibc_version_header
此特定方法不适用于 Fortran 代码和编译器,但我想知道是否有人知道类似的方法(或更具体地说,创建可移植的 Fortran 二进制文件可能需要什么,旧的 glibc 是否足够或还必须使用旧的 libfortran 等)吗?
我建议使用许多linux docker 图像作为起点。
简而言之:许多 linux 是一个 "platform definition" 用于分发二进制轮(Python 可能包含编译代码的包),运行 在最新的 [=34] =] 系统。需要 manylinux 及其定义可以找到 Python Enhancement Proposal 513
他们的镜像基于 CentOS 5,包括所有基本的开发工具,包括 gfortran。您的流程是(我没有测试,可能需要稍作调整):
- 运行 来自 https://github.com/pypa/manylinux 的 docker 图片
- 使用标志
-static-libgfortran
编译您的代码
可能的调整是在他们不提供 libgfortran 的静态版本的情况下,在这种情况下您可以添加它 here。
在大多数当前使用的 linux 系统上,生成的代码应该 运行。