소스에서 패키지를 빌드하기 위해 다음 레시피를 따랐습니다.
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
주제에 대한 오래된 질문은 다음과 같습니다.데비안 패키지를 크로스 빌드하는 방법.
tshepang의 대답은 using을 가리킵니다 dpkg-buildpackage --host-arch=amd64
. --target-arch=
이것은 널리 사용되는 정의에 따르면 나에게 반직관적입니다.주인그리고표적그러나 크로스 컴파일할 때데비안은 약간 다른 명명법을 가지고 있습니다, target-arch
컴파일러 등을 빌드할 때만 사용됩니다.
예를 들어, Linux 커널을 구축하는 경우 다음과 같은 종속성이
dpkg-buildpackage
누락되었다고 불평합니다libudev-dev
.
문제를 해결했지만 일부 종속성이 누락된 --no-check-builddeps
이유를 파악하지 못했습니다 .dpkg-buildpackage