CentOS7.9环境下使用pip安装meson构建DPDK RPM包报错如何解决
问题排查与解决步骤
第一个问题:已pip安装meson但rpmbuild提示缺失构建依赖
rpmbuild的依赖检测只会读取系统rpm数据库内的包记录,通过pip安装的meson、ninja没有注册到rpm数据库,所以会被判定为依赖缺失。
解决方法二选一:
- 执行rpmbuild命令时加上
--nodeps参数,主动跳过构建依赖校验:rpmbuild -ba SPECS/dpdk.spec --nodeps - 若不想跳过依赖校验,可将spec文件中的
BuildRequires: meson替换为BuildRequires: /usr/local/bin/meson,让rpm直接校验可执行文件是否存在,而非校验rpm包是否安装。
第二个问题:build阶段报fg: no job control错误
该报错的核心原因是CentOS 7的rpm-build包没有预定义%meson宏,%meson是CentOS 8及之后版本才默认提供的rpm宏。当spec中写了未定义的%xxx格式宏时,shell会将%识别为任务控制前缀,尝试调用fg切换前台任务,因此抛出该错误。
需要对spec文件做以下修改:
- 确认pip安装的meson、ninja路径已加入rpmbuild的执行环境PATH,可在spec文件开头添加如下配置:
export PATH=/usr/local/bin:$PATH - 替换%build阶段的
%meson写法为直接调用meson命令,示例如下:%build # 替换原来的%meson开头的行 meson setup build \ --includedir=include/dpdk \ -Ddrivers_install_subdir=dpdk-pmds \ -Denable_docs=true \ -Dmachine=default \ --default-library=shared # 新增编译命令,替代原来的%meson_build(如果有写的话) ninja -C build - 若%install阶段写了
%meson_install,同样替换为直接调用ninja安装命令:%install rm -rf %{buildroot} ninja -C build install DESTDIR=%{buildroot}
按上述配置调整后即可正常完成构建。
内容的提问来源于stack exchange,提问作者Ruslan R. Laishev
相关产品推荐
相关产品推荐

