ソースからの 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=所有者目標ではないアーキテクチャ。

ベストアンサー1

トピックに関する古い質問は次のとおりです。Debian パッケージをクロスビルドする方法

tshepangの答えはusingを指しますdpkg-buildpackage --host-arch=amd64--target-arch=これは広く使用されている定義によると私にとっては直感的ではありません。所有者そしてターゲットただし、クロスコンパイル時にDebian には少し異なる命名法がありますtarget-archコンパイラなどをビルドするときにのみ使用されます。

たとえば、Linuxカーネルを構築する場合、次の依存関係が欠落しているとdpkg-buildpackage文句を言いますlibudev-dev

問題を解決しましたが、一部の依存関係が欠落している--no-check-builddeps理由を特定できませんでした。dpkg-buildpackage

おすすめ記事