Як створити ланцюжок інструментів GCC 4.7 для перехресного складання?


82

Я вже задавав це запитання про Stack Overflow, але хотів би знати, чи вдалося комусь створити інструментальну ланцюжок GCC 4.7 для перехресної компіляції ARM (для хоста Linux x86 / x86-64). Існує багато інструкцій зі створення GCC з джерела та багато доступних крос-компіляторів для попередніх 4.7 версій GCC, тільки не остання.

Компіляція на Rasp Pi сама по собі працює чудово, але це просто занадто повільно для практичних цілей.

Я нетерплячий збиратися на компіляцію, і я хотів би використовувати найновіші та найкращі інструменти.


Це здається, що я також повинен зробити. Ми розробляємо для ARM5 під управлінням Linux Linux. Розробка працює на Ubuntu Linux 10.04 LTS (сьогодні, можливо, ми її модернізуємо завтра, я ще не знаю). Наразі ми використовуємо GCC 4.4, але те, що мені потрібно зробити, буде корисним, якщо не вимагає GCC 4.7 (мінімум), якщо не GCC 4.8 (якщо ми можемо ним керувати), для мов C ++ 11. Схоже, всі ланцюги інструментів, доступні для ARM (5 або що-небудь ще), безпорадно застаріли. Чи можливо побудувати ланцюжок інструментів для перехресного компілятора з джерела та підтримувати потрібний GCC?
mwpowellhtx

У мене є невелика проблема на другому кроці. насправді я зробив ./configure і складаю команди. Все працює добре. але коли я набрав "встановити", у мене з’явилося повідомлення про помилку: "встановити: відсутній файл операнд

Дивіться також: raspberrypi.stackexchange.com/q/14587/5538 Я закрив це як дуп, але вважав, що варто посилатись тут, тому що прийнята відповідь там детально не міститься тут.
goldilocks

Відповіді:


60

Я знайшов ці вказівки Як створити перехресний компілятор для вашого Raspberry Pi . Це чудова прогулянка за допомогою crosstool-ngінструменту, який спрощує налаштування крос-компілятора для збирання LOT (він має приємний інтерфейс на основі прокльонів) і підтримує GCC 4.7.

Я дотримувався цих кроків і закінчив успішне складання 4,7 крос-компілятора.

Передумови: Необхідні наступні пакети: bison , flex , gperf , gawk , libtool , automake , g ++ , переконайтеся, що вони встановлені перед тим, як продовжувати.

  1. Щоб вперше отримати crosstool-ngз тут (я використовував версію 1.15.2).
  2. Розпакування розподілу і зробити ./configure/ make/install
  3. Створіть свіжий каталог десь у файловій системі, щоб вбудувати його та cdв нього.
  4. Біжи ct-ng menuconfig. Вам буде запропонований гарний набір меню для налаштування вашої збірки.
  5. Перейдіть у параметри Шляхи та різне. Увімкніть Спробуйте функції, позначені як ЕКСПЕРИМЕНТАЛЬНІ.
  6. Виберіть відповідний каталог префіксів . Це каталог, в який буде встановлений ваш компілятор і бібліотеки (все в порядку добре, просто переконайтеся, що каталог порожній).

    • ПРИМІТКА. Також важливо мати доступ для запису до вибраної папки
  7. Перейдіть до меню Параметри цілі .

    • Цільова архітектура: арм
    • Ендіанство: мало ендіан
    • Біт: 32-бітний
  8. Ви також можете встановити параметр плаваючої точки на softfp (див. Це для отримання додаткової інформації), але hardfp більше підходить для Raspbian.

  9. Перейдіть до меню Операційна система та змініть Target OS на Linux .
  10. Перейдіть до меню компілятора C і виберіть gcc версії 4.7.0 (стаття рекомендує Linaro, але мені вдалося змусити його працювати з ванільним gcc). Також вибрали додаткові мови, які ви хочете мати змогу компілювати (C ++, Fortran, ...)
  11. Перейдіть у меню бібліотеки С і виберіть його. За замовчуванням - eglibc, але той не створив мене добре, тому я використав glibc (найновіша версія).

    • ПРИМІТКА: під час кроку збірки 13. eglibc не може побудувати, якщо субверсія не встановлена, оскільки джерело неможливо отримати з сховища
    • ПРИМІТКА: eglibc більше не входить до версії 1.21.0 через недостатню розробку. Дивіться так довго до eglibc . Використовуйте glibc за замовчуванням. crosstool-ng
  12. Закрийте інструмент налаштування, зберігаючи зміни.
  13. Запустити ct-ng buildв одному каталозі. Почекайте деякий час (у моєму випадку близько 45 хвилин), і ваш крос-компілятор повинен бути готовий.

Здається, чудово працює!


Нічого собі, 45 хвилин - це довгий час. Наскільки швидка ваша система? Я зараз чекаю.
Стрибки

Ну, можливо, це було трохи менше, але він повинен скомпілювати всі передумови першими, а після bintools та gcc також libc та libstdc ++, тому 45 хв звучить для мене розумно.

Чи можемо ми додати детальну інформацію про те, як їх правильно встановити та оновити шлях, перевіривши звичайно?
Алекс Чемберлен

2
Крім того, я думаю, що ми повинні використовувати hardfp, оскільки RPi підтримує це.
Алекс Чемберлен

Можливо, але IIRC, GCC Arch є налаштованим з softfp. Я не маю часу перевірити це зараз, але я зробив вікі спільноти відповідей, тому сміливо покращуйте це.

19

Я нетерплячий збиратися на компіляцію, і я хотів би використовувати найновіші та найкращі інструменти.

Насправді, новітні та найкращі інструменти не потрібно будувати самостійно. У сховищі Raspberry Pi Tool GitHub ви знайдете ланцюжки інструментів X86_64та x686програмне забезпечення для перехресного складання програмного забезпечення.

Я рекомендую використовувати x86-linux64-cross-arm-linux-hardfpланцюжок інструментів, оскільки це буде компілювати для Hard Floating Point, що призведе до набагато швидшої системи.

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

Примітка. Якщо ви використовуєте наявне ядро, вам доведеться використовувати ланцюжок інструментів, яка відповідає ядру. HardFP-програми не працюватимуть на ядрі SoftFP.


Щоб використовувати ланцюжок інструментів, просто перегляньте сховище:

git clone https://github.com/raspberrypi/tools.git --depth 1

--depthПараметр буде означати , що ви не повинні чекати історії сховище для завантаження , а також (так як ми не будемо використовувати його).

Потім додайте двійкові файли до змінної PATH:

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

Або зберігати ПАТ:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

Для компіляції з ланцюжком інструментів тепер можна додати CROSS_COMPILEпараметр. Наприклад, під час запуску make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

Або щоб зробити це простіше, ви можете зберегти змінну bashrcзнову:

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

а тепер використовуйте змінну при компілюванні:

make CROSS_COMPILE=${TARGET}

1
Це здається gcc-4.5.1.

@Tibor Це погано?
Відхилення

@Jivings Це абсолютно не відповідає на питання!
Алекс Чемберлен

1
Я не схвалюю протистояння. @AlexChamberlain Він пропонує цінний альтернативний метод, який займає багато часу, аби створити власну ланцюжок інструментів.
Відхилення

2
@ Життя: Це дуже корисно. Тим часом це gcc4.7.1 (найкраще, що я коли-небудь мав), і плаваюча точка працює відразу. Я не міг зробити роботу з плаваючою точкою, використовуючи оригінальний опис Кріса, який опублікував Тібор. Дякую багато.

4

Зауважте, що будуючи ланцюжок інструментів за допомогою ct-ng на centos 6.3 в 64-бітовій системі, я був змушений скасувати вибір для статичного зв’язку libstdc ++, оскільки статичне посилання не підтримувалося на платформі (мабуть).

Крім того, хоча було б чудово використовувати заздалегідь вбудований ланцюжок інструментів із сховища git, схоже, цей ланцюг не працює на Centos 6.3 - можливо, тому, що він побудований для більш сучасної системи чи чогось іншого. Я не дуже намагався це запустити.



3

Якщо ви хочете скористатися швидким хостом для складання речей для вашого ІРП, я пропоную працювати в крос-середовищі через chroot та QEMU. Це, до речі, заміняє крос-компілятор без клопоту.

Просто встановіть крос-середовище Debian за допомогою deboostrap / multiistrap

(див. розділ QEMU / підхід до debootstrap) і ви закінчили.


3

У разі, якщо ви збираєтеся перехресно компілювати з OS X: ось чудова стаття (і єдина, що працює в Інтернеті, яку я знайшов).

Найбільше, що автор надає повний заздалегідь складений ланцюжок інструментів , тому вам потрібно лише завантажити, розпакувати та змонтувати зображення в dmg. І ось це, ви готові до перехресного складання.


2

Якщо ви встановили 64-бітну версію Ubuntu та інструменти Raspberry Pi SVN, і ви отримуєте помилку:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

просто біжи:

sudo apt-get install ia32-libs

1

Компанія Carlson-Minot Inc. пропонує заздалегідь вбудовану ланцюжок інструментів як для металів з голими металами, так і для GNU / Linux ARM. Цей ланцюжок інструментів заснований на ланцюжку інструментів Mentor Graphics Sourcery Lite з виправленнями та прийняттями для побудови на ОС X. Див.

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