ソースからパッケージをビルドするには、次のレシピに従いました。
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=
所有者目標ではないアーキテクチャ。
答え1
トピックに関する古い質問は次のとおりです。Debian パッケージをクロスビルドする方法。
tshepangの答えはusingを指しますdpkg-buildpackage --host-arch=amd64
。--target-arch=
これは広く使用されている定義によると私にとっては直感的ではありません。所有者そしてターゲットただし、クロスコンパイル時にDebian には少し異なる命名法があります、target-arch
コンパイラなどをビルドするときにのみ使用されます。
たとえば、Linuxカーネルを構築する場合、次の依存関係が欠落していると
dpkg-buildpackage
文句を言いますlibudev-dev
。
問題を解決しましたが、一部の依存関係が欠落している--no-check-builddeps
理由を特定できませんでした。dpkg-buildpackage