交叉构建时 buildrpm 失败

Posted

技术标签:

【中文标题】交叉构建时 buildrpm 失败【英文标题】:buildrpm fails when cross building 【发布时间】:2015-02-04 20:56:23 【问题描述】:

我成功为 Raspberry Pi(ARM 架构)编译了 c++ 代码。

此类二进制文件有一个文件命令返回以下内容:

usr/local/company/product/this:ELF 32 位 LSB 可执行文件,ARM,EABI5 版本 1 (SYSV),动态链接(使用共享库),适用于 GNU/Linux 2.6.26,BuildID[sha1]= 9fe73c254b317e239758e4445d12b8441a3cb13e,未剥离

我现在希望生成 RPM 包(不是 .deb 包,真正的 .RPM 包!)。 我尝试了许多 --target 和 spec 的文件 buildarch 组合,但没有取得多大成功。 试过 armv7l、arm-linux-gnueabihf、arm-linux ...

rpmbuild 返回相同的结果:

构建目标平台:arm-unknown-linux 为目标 arm-unknown-linux 构建 错误:没有找到兼容的构建架构

我正在从 x86_64 Ubuntu 编译。目标架构是 arm-linux-gnueabihf。

我调用 rpmbuild 如下: rpmbuild -bb --target armv7l myfile.spec

谢谢

【问题讨论】:

【参考方案1】:

在我的 RHEL 7 计算机上,/usr/lib/rpm/rpmrc 包含几个 ARM 变体: armv3larmv4barmv4larmv4tlarmv5telarmv5tejlarmv6larmv7larmv7hlarmv7hnl。我猜你的文件会有类似的选择,因此包括你选择的armv7l 选项。

我发现对于交叉打包,运行rpmbuild --target _target_ 是不够的。我还必须在构建命令周围使用setarch _target_ 包装器。

【讨论】:

【参考方案2】:

您可能需要将您的 arm 架构(由 uname -m 显示)添加到 /usr/lib/rpm/rpmrc 配置中。

【讨论】:

以上是关于交叉构建时 buildrpm 失败的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 交叉联接失败

为啥我的 (x86->64) windows 交叉编译器的编译失败?

QueryDSL 在构建谓词查询时添加交叉连接

在树莓派的交叉编译 qt 中构建应用程序时出错

交叉呼叫与 Post 一起工作,但在飞行前失败

如何在交叉编译armv7的图集时缩短构建时间?