从源代码交叉编译 Debian 软件包

从源代码交叉编译 Debian 软件包

我按照以下食谱从源代码构建了一个包:

echo "deb-src http://archive.ubuntu.com/ubuntu focal main" >> /etc/apt/sources.list
echo "deb-src http://archive.ubuntu.com/ubuntu focal-updates main" >> /etc/apt/sources.list
apt update

apt source package
apt build-dep -y package

cd package/
dpkg-buildpackage

我想在 aarch64 主机上针对 amd64 目标交叉编译此包。哪些部分可能需要修改?

例如,我可以从以下开始:

# basically, set up the apt repos for both amd64 and aarch64 
sed -i '/^deb / {p; s/^deb /deb [arch=arm64] /}' /etc/apt/sources.list
sed -i 's,^deb http://ports.ubuntu.com/ubuntu-ports/,deb [arch=amd64] http://archive.ubuntu.com/ubuntu/,' /etc/apt/sources.list

echo "deb-src [arch=amd64] http://archive.ubuntu.com/ubuntu focal main" >> /etc/apt/sources.list
echo "deb-src [arch=amd64] http://archive.ubuntu.com/ubuntu focal-updates main" >> /etc/apt/sources.list
dpkg --add-architecture amd64
apt update

# install the cross compiler
apt install -y gcc-x86-64-linux-gnu

apt source package:amd64
apt build-dep -y package:amd64

cd package/
dpkg-buildpackage --target-arch=amd64

但这似乎并不完整。例如,如果我正在构建 Linux 内核,dpkg-buildpackage则会抱怨我缺少诸如 之类的依赖项libudev-dev,并且它会调用make ARCH=arm64 CROSS_COMPILE=which 用于主持人架构,而不是目标。

答案1

这是关于该主题的一个老问题:如何交叉构建 Debian 软件包

tshepang 的回答指出使用dpkg-buildpackage --host-arch=amd64而不是--target-arch=.根据广泛使用的定义,这对我来说是违反直觉的主持人目标交叉编译时,但是Debian 的命名法略有不同,并且target-arch仅在构建编译器等时使用。

例如,如果我正在构建 Linux 内核,dpkg-buildpackage则会抱怨我缺少诸如libudev-dev...之类的依赖项

我解决了这个问题,--no-check-builddeps但我还没有弄清楚为什么dpkg-buildpackage相信缺少一些依赖项。

相关内容