Как я могу кросс-компилировать мое приложение для архитектуры Ubuntu 12.04 armhf на хосте Ubuntu 12.04 i386?

16

У меня есть большое заявление, которое я написал. Я могу успешно скомпилировать приложение в следующих сценариях:

  • в нативной компиляции для хоста i386 под управлением Ubuntu 12.04
  • изначально на PandaBoard под управлением Ubuntu 12.04 (это занимает много времени)
  • использование Qemu и chroot на главном ПК для цели armhf PandaBoard (это занимает очень много времени)

Я хотел бы кросс-компилировать приложение на хосте i386 для запуска на такой цели, как PandaBoard, для своевременного завершения сборок. До сих пор попытки, сделанные с использованием цепочки инструментов arm-linux-gnueabihf в репозиториях, дали двоичные файлы, которые работают неправильно. На данном этапе я не планирую упаковывать программное обеспечение.

Каков рекомендуемый способ достижения успешного кросс-компиляции?

Джонатан Кейв
источник
Кросс-компиляция с кросс-компилятором должна работать, вот для чего она. Каким образом двоичные файлы не работают правильно?
Жиль "ТАК - перестань быть злым"
Мои двоичные файлы заканчиваются почти сразу. Похоже, что strace указывает на то, что libc.so.6 находится не там, где ожидается.
Джонатан Кейв
Это должно быть исправлено с помощью опции ссылки (я не знаю, какая из них необоснованная). На целевой системе работает Ubuntu?
Жиль "ТАК - перестань быть злым"
Да, цель также работает под управлением Ubuntu 12.04. Я думал, что, возможно, мне нужно использовать параметр --sysroot для компилятора и компоновщика, но это отключено в цепочке инструментов Ubuntu.
Джонатан Кейв
У меня просто работает набор инструментов, 12.04. Я только что проверил его на amd64 и успешно запустил бинарный файл, созданный на сервере armhf. Но у меня нет под рукой машины для сборки i386. Если у вас все еще есть проблемы, вам нужно уточнить. Что говорит лдд? Что вы увидели от strace, который привел вас к выводу? Посмотрите, сможете ли вы свести свою проблему к простому тестовому сценарию, который должен четко работать, и представьте шаги, которые вы предпринимаете в деталях.
Роби Басак

Ответы:

6

https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/UsingMultiArch

https://wiki.ubuntu.com/MultiarchCross

В Ubuntu есть кросс-цепочка, apt-get install gcc-arm-linux-gnueabihfно работа над цепочкой инструментов следующего поколения обсуждается здесь: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

На данный момент существует ряд обходных путей. Например, если вы используете косвенные ссылки (описанные на вики-странице linaro), вам также следует избегать запуска внешних двоичных файлов сразу после их компиляции.

Кроме того, это действительно самый зрелый с автоинструментами.

Я получил свой пакет для кросс-компиляции довольно быстро.

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf
user72421
источник
3
Пожалуйста, объясните, что делают эти шаги, и что это за ключ -aarmhf. Они не знакомы многим пользователям, поэтому им приходится искать еще один уровень глубже, чтобы получить полезный ответ. Благодарю.
Гарип