我正在尝试在 Debian Jessie 中为软件包设置构建环境。我需要生成该软件的 amd64、i386 以及最终的 armel 和 armhf 二进制文件。如果我可以将它交叉编译到 Debian 支持的所有架构,那就太酷了,这些架构远不止这些,但这 4 个是我特别关心的。
我从 amd64 Debian Jessie 开始,并添加了 i386 多架构。
一切都运行良好,直到我必须安装libpulse-dev
,这是该软件的依赖项。安装时我得到了
以下软件包具有未满足的依赖项: libpulse-dev :依赖: libglib2.0-dev 但不会安装
与apt-get
和
以下软件包具有未满足的依赖关系: libglib2.0-dev :冲突:libglib2.0-dev:i386 但已安装 2.42.1-1。
和aptitude
。
看起来好像libglib2:amd64
是libglib2:i386
冲突的——它们不能同时安装。 Freenode 的某人#debian
告诉我,这是多架构的一个众所周知的限制。
我必须安装该软件包才能构建 i386。
我正在考虑删除 i386 multiarch,因为它不起作用,并设置 i386 chroot 并在该 chroot 内构建 i386 版本的软件。
该 chroot 解决方案应该适用于 i386,但当我为 armel、armhf、arm64、mips 和所有其他架构生成二进制文件时,它不起作用 - 我将无法在 armel、armhf、arm64 中进行这些构建、 mips 等 chroots,因为我无法在我的处理器上运行 arm 和 mips 可执行文件。
如何以一致的方式在同一个 Debian Jessie 系统上生成针对 amd64、i386、armel、armhf、arm64 和 mips 架构的软件构建(即所有构建都以相同的方式完成,而不是“为一个架构构建使用 chroot”) ,但其他架构的构建使用多架构”)而不会libglib2
像我使用多架构时那样发生冲突?
答案1
不幸的glib2.0
是(尚不兼容多架构);你可以订阅https://bugs.debian.org/648621如果你想密切关注事物。
要为各种架构构建软件,您可以使用pbuilder
和/或qemubuilder
。 Debian 对 chroots 有很好的支持,使用 Qemu 在不同的架构上运行二进制文件;debootstrap
原生支持这一点。
答案2
您可以结合这两种方法,使用多架构进行交叉编译以获取依赖项,但为每个目标架构使用专用的 chroot。
这样你就不会遇到那么多冲突问题。我不能保证它适用于您的包,但它比尝试在同一根文件系统下执行所有架构有更好的机会。