You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RPM构建DPDK 21.11.1时spec自定义宏已替换但执行失败

故障根因
  • 构建工具版本不兼容:DPDK 21.11 最低要求 meson ≥ 0.53、ninja ≥ 1.10,当前环境安装的 meson 0.49.2、ninja 1.8.2 版本远低于最低要求,meson 配置阶段虽然能跑完,但生成的构建规则和老版本 ninja 不匹配,执行编译时直接触发报错。
  • RPM 宏展开冲突:自定义的%meson_build宏和系统rpm-macros-meson包提供的同名公共宏冲突,且宏定义存在递归引用问题,RPM 替换宏时无法正确解析层级,最终生成的 shell 脚本里残留未替换的宏字符串、命令拼接错误,导致 shell 执行失败。
  • 宏定义缺失必要逻辑:系统自带的%meson_build宏默认注入了编译前环境检查、标准编译参数等必要逻辑,直接重写宏后丢失这部分内容,也会导致构建流程异常。
修复方案
  1. 升级容器内构建工具到满足DPDK要求的版本
    # 卸载旧版本
    rpm -e --nodeps meson ninja-build
    # 安装符合版本要求的meson
    pip3 install meson>=0.53
    # 下载ninja 1.10+版本二进制,解压到/bin目录并赋予可执行权限
    # 验证版本
    meson --version
    ninja --version
    
  2. 修正spec文件中的宏定义,不要和系统公共宏重名,避免递归展开问题
    %define __ninja /bin/ninja
    %define __ninja_common_opts -v %{?_smp_mflags}
    %define my_ninja_build %{__ninja} %{__ninja_common_opts}
    %define my_meson_build %my_ninja_build -C %{_vpath_builddir}
    
  3. 按照RPM打包meson项目的规范调整%build段逻辑,不要跳过meson配置步骤
    %build
    # 先执行meson配置,指定安装路径、编译选项
    %meson setup %{_vpath_builddir} \
        -Dprefix=%{_prefix} \
        -Dlibdir=%{_libdir} \
        # 不需要的驱动可以直接在此处关闭,避免依赖缺失报错
        -Ddisable_drivers=common/mlx5,net/mlx5,crypto/mlx5
    # 执行编译
    %my_meson_build
    
  4. 对照meson日志里的缺失依赖列表,按需安装对应开发包启用需要的驱动,不需要的驱动直接在配置阶段关闭即可,不影响核心功能编译。
打包规范提示
  • 打包meson类RPM包时,优先使用系统提供的标准meson宏,非必要不要重定义同名公共宏,避免出现宏冲突、参数丢失问题。如果需要自定义编译参数,直接给标准宏传参即可,无需整个重写宏逻辑。
  • 编译高版本DPDK前必须先核对官方文档标注的最低构建依赖版本,不要直接用发行版默认源提供的老版本meson、ninja,多数发行版默认源携带的版本都无法满足新版DPDK的构建要求。
  • 定义RPM宏时,引用其他宏统一用%{宏名}的格式明确包裹,不要直接写%宏名,避免宏解析时出现识别错误。

内容的提问来源于stack exchange,提问作者shiv chittora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:45:32