Как установить зависимости для проекта, который кросс-компилируется на хосте x86 для цели arm - PullRequest
4 голосов
/ 11 октября 2019

Я пытаюсь построить проект (https://wpewebkit.org/) на Debian Buster для armv7 на хосте x86 той же ОС.

Я могу успешно установить набор инструментов arm C ++, и яможет успешно компилировать и запускать тривиальные приложения.

Когда я застрял, многие проекты, которые я хочу скомпилировать, требуют многих зависимостей, которые я обычно устанавливаю через менеджер пакетов ОС (например, apt-get install libjpeg-dev). Похоже, что я могу просто загрузить & make install нужные мне источники. Однако этот проект имеет сотни зависимостей - потребуется много времени, чтобы загрузить и скомпилировать все из них. зависимости уже существуют в apt для arm.

Как я могу в хост-системе установить версии этих зависимостей armhf и сделать их доступными для моей кросс-компиляции? Я пробовал dpkg add-architecture armhf изатем установка через apt-get install libjpeg-dev:armhf, но cmake не может найти установленные зависимости.

Ответы [ 2 ]

1 голос
/ 17 октября 2019

@ направляющие artless-noise были хорошей отправной точкой, но, к сожалению, большинство руководств не помогли выполнить то, что я хотел сделать (или, если они были, они не были прямыми в объяснении, как выполнить то, что янужно).

В итоге я использовал qemu-debootstrap

sudo qemu-debootstrap --arch armhf buster /mnt/data/armhf http://deb.debian.org/debian/

А потом просто использовал sudo chroot /mnt/data/armhf, и у меня была работающая оболочка, где я мог apt-get все, что янеобходимо, запустить любые сценарии и получить двоичные файлы armhf.

1 голос
/ 14 октября 2019

Есть много способов сделать это. Ключевой концепцией является то, что вам нужна теневая файловая система, которая имитирует ARM, и вам нужно сообщить механизму сборки пакета, где они находятся. Существует множество вариантов дистрибутивов. LTIB основан на rpm, Yocto использует BitBake и поддерживает deb, rpm и ipkg. Также необходимо различать build tools и внедренные исполняемые файлы. Это дополнительная концепция при кросс-компиляции. Единственное, что сказано выше, это то, что Ltib, Yocto, buildroot и т. Д. Содержат теневую корневую файловую систему и место для хранения host / build двоичных файлов. Поскольку у вас есть система Debian, лучше придерживаться их инструментов.

Возможна установка с dpkg --root. А если у вас полная среда, вы можете chroot arm_root и затем собрать пакет с двоичными файлами хоста, но с файлами разработки ARM (заголовками и библиотеками).

Руководство по обслуживанию Debian обзор сборки пакетов Debian для случая normal . Вики-кросс-компиляция Debian использует методы chroot и содержит ссылку на сборку с использованием пакетов sbuild или pbuild. Пакет schroot очень хорош, так как позволяет создавать теневую файловую систему, не становясь пользователем root. При обучении кросс-дистрибутивной сборке очень легко уничтожить файловую систему хоста, и я настоятельно рекомендую этот метод. Еще одно ключевое отличие между maint-guide и Cross Wiki заключается в установке пакета Cross build Essentials .

sudo apt-get install build-essential crossbuild-essential-armhf

В противном случае большинствовсе то же самое, но сборка с файловой системой chroot shadow ARM.

Вот перевод для хостов Ubuntu ... вам нужно Zenial или лучше использовать вики-метод кросс-компиляции Debian. Т.е. сборка Ubuntu x86 Bionic для Raspberry PI или аналогичная. Этот метод заботится о многих вещах для вас, особенно предотвращая повреждение файловой системы по ошибке;спасибо добрым душам в Debian.


Информация по номенклатуре очень важна,

  • build означает архитектуру chroot /Исполняемый файл dpkg / compiler, то есть архитектура системы build (называемая host по cmake / kernel / etc)

  • host означает архитектурусозданных исполняемых объектов, то есть архитектура системы host , в которой эти гостевые объекты будут выполняться (называемые целевыми или иногда создаваемыми в других местах)

  • target - это то, что сгенерированные исполняемые объекты будут генерировать при создании исполняемых объектов, то есть архитектура систем, на которых построены программы target их результаты для запуска (актуально только для компиляторов и аналогичных)

Люди меняют имена для одних и тех же концепций в кросс-билдинге, и это может сбивать с толку.

Дополнительная информация

...