我正在尝试从 UBI8 中的源代码编译 GCC 8.5.0。具体来说,我想同时构建 GNAT。从 Docker 镜像开始
redhat/ubi8
我安装所需的软件包
dnf install -y gcc-gnat gcc-c++ gmp-devel mpfr-devel libmpc-devel
并从GNU网站下载GCC 8.5.0(与系统编译器版本相同)的源代码。
我解压缩,创建构建目录,然后从那里运行配置。大多数标志在这里无关紧要,但我将 ada 添加到构建中:
../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto,ada ...
我收到此错误:
configure: error: GNAT is required to build ada
显然
gnat
已安装:
# gnat --version
GNAT 8.5.0 20210514 (Red Hat 8.5.0-21)
Copyright (C) 1996-2018, Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
那么发生了什么?
gcc
似乎不是使用 ada 前端构建的,因此它无法理解 ada 文件。正如这里所见
# touch a.adb
# gcc -c a.adb
gcc: error: a.adb: Ada compiler not installed on this system
这引出了我的问题:是否可以使用系统编译器构建 GNAT?我能够在 CentOS7 上运行,因为那里的软件包内置了前端,但这里似乎没有
可能不是。查看EPEL中gcc-gnat包的描述:
重要提示:对于带有 Ada/GNAT 的 GCC,请使用“gnatgcc”而不是“gcc” 支持,因为不幸的是“gcc”并不是真正的模块化,而且也是 构建时没有 Red Hat(或 100% bug-for-bug 的供应商)的 Ada/GNAT 支持 兼容的嵌入式发行版)。
为 GCC 提供 GNAT 的软件包将其作为独立的 GCC 编译器提供,并支持 Ada (
gnatgcc
)。 “正常”gcc
可执行文件是从 Red Hat 存储库安装的。该编译器(从 RHEL 8 开始,链接)是在没有 Ada 支持的情况下构建的。
上述内容可以在软件包安装程序的输出中得到验证。它表明
gcc-gnat
是从 epel
安装的,gcc
是从 ubi-9-appstream-rpms
安装的。
注意:输出显示在 UBI 9 上安装了
gcc-gnat
,因为我无法在 UBI 8 上安装它。但推理似乎是相同的。
Extra Packages for Enterprise Linux 9 - x86_64 7.5 MB/s | 21 MB 00:02
Extra Packages for Enterprise Linux 9 openh264 5.9 kB/s | 2.5 kB 00:00
Dependencies resolved.
=======================================================================================
Package Arch Version Repository Size
=======================================================================================
Installing:
gcc-gnat x86_64 11.4.1-4.el9 epel 16 M
Upgrading:
glibc x86_64 2.34-100.el9_4.2 ubi-9-baseos-rpms 2.0 M
glibc-common x86_64 2.34-100.el9_4.2 ubi-9-baseos-rpms 313 k
glibc-minimal-langpack x86_64 2.34-100.el9_4.2 ubi-9-baseos-rpms 28 k
Installing dependencies:
binutils x86_64 2.35.2-43.el9 ubi-9-baseos-rpms 4.6 M
binutils-gold x86_64 2.35.2-43.el9 ubi-9-baseos-rpms 736 k
cpp x86_64 11.4.1-3.el9 ubi-9-appstream-rpms 11 M
elfutils-debuginfod-client x86_64 0.190-2.el9 ubi-9-baseos-rpms 39 k
gcc x86_64 11.4.1-3.el9 ubi-9-appstream-rpms 32 M
glibc-devel x86_64 2.34-100.el9_4.2 ubi-9-appstream-rpms 42 k
glibc-headers x86_64 2.34-100.el9_4.2 ubi-9-appstream-rpms 548 k
kernel-headers x86_64 5.14.0-427.18.1.el9_4 ubi-9-appstream-rpms 7.4 M
libgnat x86_64 11.4.1-4.el9 epel 1.3 M
libgnat-devel x86_64 11.4.1-4.el9 epel 4.1 M
libmpc x86_64 1.2.1-4.el9 ubi-9-appstream-rpms 65 k
libpkgconf x86_64 1.7.3-10.el9 ubi-9-baseos-rpms 37 k
libxcrypt-devel x86_64 4.4.18-3.el9 ubi-9-appstream-rpms 32 k
make x86_64 1:4.3-8.el9 ubi-9-baseos-rpms 541 k
pkgconf x86_64 1.7.3-10.el9 ubi-9-baseos-rpms 45 k
pkgconf-m4 noarch 1.7.3-10.el9 ubi-9-baseos-rpms 16 k
pkgconf-pkg-config x86_64 1.7.3-10.el9 ubi-9-baseos-rpms 12 k
Installing weak dependencies:
glibc-langpack-en x86_64 2.34-100.el9_4.2 ubi-9-baseos-rpms 666 k