Як перехресно скомпілювати свою програму для архітектури Ubuntu 12.04 armhf на хості Ubuntu 12.04 i386?


16

У мене є велика заявка, яку я написав. Я можу успішно скласти програму в наступних сценаріях:

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

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

Який рекомендований спосіб досягти успішної перехресної компіляції?


Перехресне компілювання з ланцюжком інструментів крос-компілятора повинно працювати, ось для чого це потрібно. Яким чином двійкові файли не працюють належним чином?
Жиль "ТАК - перестань бути злим"

Мої бінарні файли припиняються майже відразу. Начебто, strace вказує на те, що libc.so.6 не є там, де очікується.
Джонатан Печера

Це має бути зафіксовано за допомогою параметра посилання (я не знаю, який з інших). Чи працює цільова система Ubuntu?
Жил "ТАК - перестань бути злим"

Так, ціль також працює Ubuntu 12.04. Я думав, що, можливо, мені потрібно використовувати параметр --sysroot для компілятора і лінкера, але це відключено в ланцюзі інструментів Ubuntu.
Джонатан Печера

Мережа інструментів Просто працює для мене, 12.04. Я щойно тестував його на amd64 і успішно запускав двійкові файли, які він виробляв на сервері armhf. Але у мене не зручна збірка i386. Якщо у вас все ще виникають проблеми, вам потрібно буде детально розібратися. Що говорить ldd? Що ви бачили зі страйку, який привів вас до вашого висновку? Подивіться, чи можете ви звести свою проблему до простого тестового випадку, який повинен чітко працювати, та детально презентуйте кроки, які ви робите.
Robie Basak

Відповіді:


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

3
Поясніть, будь ласка, що роблять ці кроки та що таке перемикач -aarmhf. Вони не знайомі багатьом користувачам, і вимагають від них шукати ще один шар глибше, щоб отримати корисну відповідь. Спасибі.
garyp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.