davylin 2026-02-19 12:28 采纳率: 37.5%
浏览 7

在 CentOS Stream 10 中,使用rpmbuild -bp 预编译自身本版的 gcc 的SRPM包 gcc-14.3.1-4.3.el10.src.rpm 报错

在 CentOS Stream 10 中,使用rpmbuild -bp 预编译自身本版的 gcc 的SRPM源代码包 gcc-14.3.1-4.3.el10.src.rpm 报错。
在 CentOS Stream 9 中,使用rpmbuild -bp 预编译gcc的SRPM源代码包 gcc-14.3.1-4.3.el10.src.rpm 反而不会报错。

在 CentOS Stream 10 中,使用rpmbuild -bp 预编译自身本版的 gcc 源码包 gcc-14.3.1-4.3.el10.src.rpm 报错信息如下:

[mockbuild@centos-stream-10 SPECS]$ rpmbuild -bp gcc.spec 
warning: line 403: It's not recommended to have unversioned Obsoletes: Obsoletes: libmudflap
warning: line 404: It's not recommended to have unversioned Obsoletes: Obsoletes: libmudflap-devel
warning: line 405: It's not recommended to have unversioned Obsoletes: Obsoletes: libmudflap-static
warning: line 410: It's not recommended to have unversioned Obsoletes: Obsoletes: libcilkrts
warning: line 411: It's not recommended to have unversioned Obsoletes: Obsoletes: libcilkrts-static
warning: line 412: It's not recommended to have unversioned Obsoletes: Obsoletes: libmpx
warning: line 413: It's not recommended to have unversioned Obsoletes: Obsoletes: libmpx-static
setting SOURCE_DATE_EPOCH=1769385600
error: Failed build dependencies:
    (glibc32 or glibc-devel(x86-32)) is needed by gcc-14.3.1-4.3.el10.x86_64
    cross-binutils-aarch64 >= 2.41 is needed by gcc-14.3.1-4.3.el10.x86_64
    cross-binutils-ppc64le >= 2.41 is needed by gcc-14.3.1-4.3.el10.x86_64
    cross-binutils-s390x >= 2.41 is needed by gcc-14.3.1-4.3.el10.x86_64
    dblatex is needed by gcc-14.3.1-4.3.el10.x86_64
    docbook5-style-xsl is needed by gcc-14.3.1-4.3.el10.x86_64
    doxygen >= 1.7.1 is needed by gcc-14.3.1-4.3.el10.x86_64
    gmp-devel >= 4.1.2-8 is needed by gcc-14.3.1-4.3.el10.x86_64
    libmpc-devel >= 0.8.1 is needed by gcc-14.3.1-4.3.el10.x86_64
    lld >= 15 is needed by gcc-14.3.1-4.3.el10.x86_64
    llvm >= 15 is needed by gcc-14.3.1-4.3.el10.x86_64
    mpfr-devel >= 3.1.0 is needed by gcc-14.3.1-4.3.el10.x86_64
    python3-devel is needed by gcc-14.3.1-4.3.el10.x86_64
    python3-sphinx is needed by gcc-14.3.1-4.3.el10.x86_64
    rpm-devel is needed by gcc-14.3.1-4.3.el10.x86_64
    sysroot-aarch64-el10-glibc >= 2.39 is needed by gcc-14.3.1-4.3.el10.x86_64
    sysroot-ppc64le-el10-glibc >= 2.39 is needed by gcc-14.3.1-4.3.el10.x86_64
    sysroot-s390x-el10-glibc >= 2.39 is needed by gcc-14.3.1-4.3.el10.x86_64
    texinfo-tex is needed by gcc-14.3.1-4.3.el10.x86_64
    texlive-collection-latex is needed by gcc-14.3.1-4.3.el10.x86_64

RPM build warnings:
    line 403: It's not recommended to have unversioned Obsoletes: Obsoletes: libmudflap
    line 404: It's not recommended to have unversioned Obsoletes: Obsoletes: libmudflap-devel
    line 405: It's not recommended to have unversioned Obsoletes: Obsoletes: libmudflap-static
    line 410: It's not recommended to have unversioned Obsoletes: Obsoletes: libcilkrts
    line 411: It's not recommended to have unversioned Obsoletes: Obsoletes: libcilkrts-static
    line 412: It's not recommended to have unversioned Obsoletes: Obsoletes: libmpx
    line 413: It's not recommended to have unversioned Obsoletes: Obsoletes: libmpx-static
  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-02-19 12:29
    关注

    中午好🌞🌞🌞
    本答案参考通义千问

    在 CentOS Stream 10 中使用 rpmbuild -bp 预编译 GCC 的 SRPM 包(gcc-14.3.1-4.3.el10.src.rpm)时出现的错误,主要是由于构建依赖项缺失RPM spec 文件中存在警告性问题。以下是对该问题的详细分析与解决方案。


    问题原因分析

    1. 依赖项缺失

    错误信息显示了很多缺失的构建依赖项,例如:

    • glibc32 or glibc-devel(x86-32)
    • cross-binutils-aarch64 >= 2.41
    • lld >= 15
    • llvm >= 15
    • sysroot-*

    这些依赖项是 GCC 构建过程中必需的工具链和库文件,但在 CentOS Stream 10 中可能未安装或版本不兼容。

    2. RPM spec 文件中的警告

    虽然不是致命错误,但 RPM spec 文件中某些 Obsoletes 字段没有指定版本号,这在新版 RPM 中会被视为不推荐的做法,可能导致构建过程中的警告甚至潜在的问题。


    解决方案

    第一步:安装缺失的构建依赖项

    你需要安装所有列出的构建依赖项。可以使用 dnfyum 命令进行安装。以下是一个示例命令:

    sudo dnf install -y \
        glibc-devel.x86_64 \
        glibc-devel.i686 \
        cross-binutils-aarch64 \
        cross-binutils-ppc64le \
        cross-binutils-s390x \
        dblatex \
        docbook5-style-xsl \
        doxygen \
        gmp-devel \
        libmpc-devel \
        lld \
        llvm \
        mpfr-devel \
        python3-devel \
        python3-sphinx \
        rpm-devel \
        sysroot-aarch64-el10-glibc \
        sysroot-ppc64le-el10-glibc \
        sysroot-s390x-el10-glibc \
        texinfo-tex \
        texlive-collection-latex
    

    注意:部分包可能不在默认仓库中,需要启用额外的仓库(如 EPEL、PowerTools 或 CentOS SCLO)。


    第二步:修改 RPM spec 文件以消除警告

    你可以在 gcc.spec 文件中对 Obsoletes 行添加版本号。以下是具体操作步骤:

    修改前:

    Obsoletes: libmudflap
    Obsoletes: libmudflap-devel
    Obsoletes: libmudflap-static
    

    修改后:

    Obsoletes: libmudflap >= 1.0
    Obsoletes: libmudflap-devel >= 1.0
    Obsoletes: libmudflap-static >= 1.0
    

    重复此操作,处理其他类似行(如 libcilkrts, libmpx 等)。


    第三步:重新运行 rpmbuild -bp

    完成以上两个步骤后,再次运行:

    rpmbuild -bp gcc.spec
    

    此时应能成功执行,不再报错。


    第四步(可选):配置 mock 构建环境(如果使用 mock)

    如果你使用 mock 进行构建,确保你的 mock 配置文件(如 /etc/mock/site.cfg)中包含了必要的依赖仓库和构建环境设置。

    例如,在 site.cfg 中添加:

    [el10]
    name=CentOS-Stream-10
    enabled=1
    gpgcheck=1
    baseurl=https://mirrors.centos.org/centos-stream/10/os/x86_64/
    

    然后运行:

    mock -r el10 --init
    mock -r el10 --build gcc-14.3.1-4.3.el10.src.rpm
    

    总结

    | 步骤 | 内容 | |------|------| | 1 | 安装缺失的构建依赖项 | | 2 | 修改 RPM spec 文件,为 Obsoletes 添加版本号 | | 3 | 重新运行 rpmbuild -bp | | 4 | 可选:配置 mock 环境以支持构建 |


    代码修改示例(spec 文件)

    原始内容(警告行):

    Obsoletes: libmudflap
    Obsoletes: libmudflap-devel
    Obsoletes: libmudflap-static
    

    修改后内容(无警告):

    Obsoletes: libmudflap >= 1.0
    Obsoletes: libmudflap-devel >= 1.0
    Obsoletes: libmudflap-static >= 1.0
    

    通过上述步骤,你应该能够解决在 CentOS Stream 10 中使用 rpmbuild -bp 编译 GCC SRPM 包时遇到的依赖和警告问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月19日