Как создать набор инструментов GCC 4.7 для кросс-компиляции?

82

Я уже задавал этот вопрос о переполнении стека, но мне хотелось бы знать, удалось ли кому-нибудь создать набор инструментов GCC 4.7 для кросс-компиляции ARM (для хоста Linux x86 / x86-64). Существует множество инструкций по сборке GCC из исходного кода и множество доступных кросс-компиляторов для версий до 4.7 GCC, но не самой последней.

Компиляция на самом Rasp Pi работает нормально, но она слишком медленная для практических целей.

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

tlhIngan
источник
Это похоже на то, что мне нужно сделать. Мы разрабатываем для ARM5 под управлением Arch Linux. Разработка ведется на Ubuntu Linux 10.04 LTS (сегодня, может быть, мы обновим это завтра, я пока не знаю). В настоящее время мы работаем с GCC 4.4, но то, что мне нужно сделать, будет полезно, если не требуется GCC 4.7 (минимум), если не GCC 4.8 (если мы можем управлять им), для функций языка C ++ 11. Кажется, что все цепочки инструментов, доступные для ARM (5 или что-то еще), беспомощно устарели. Можно ли построить цепочку инструментов кросс-компиляции из исходного кода и поддержать GCC, который мы хотим?
mwpowellhtx
У меня небольшая проблема на втором этапе. фактически я выполнил команды ./configure и make. Все отлично работает но когда я набрал "install", я получил сообщение об ошибке: install: отсутствует операнд файла
См. Также: raspberrypi.stackexchange.com/q/14587/5538 Я закрыл это, как обман, но я подумал, что здесь стоит дать ссылку, потому что принятый ответ там в значительной степени не включен здесь.
Златовласка

Ответы:

60

Я нашел эти инструкции Как построить кросс-компилятор для вашего Raspberry Pi . Это отличный пример использования crosstool-ngинструмента, который упрощает настройку сборки LOT кросс-компилятора (он имеет хороший интерфейс на основе curses) и поддерживает 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. Зайдите в Paths и разные варианты. Включите Попробуйте функции, помеченные как ЭКСПЕРИМЕНТАЛЬНЫЕ.
  6. Выберите подходящий каталог префиксов . Это каталог, в который будет установлен ваш компилятор и библиотеки (в принципе, все нормально, просто убедитесь, что каталог пуст).

    • ПРИМЕЧАНИЕ. Также важно, чтобы у вас были права на запись в выбранную папку.
  7. Перейдите в меню параметров Target .

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

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

    • ПРИМЕЧАНИЕ: на этапе 13 сборки. Eglibc может не скомпилироваться, если Subversion не установлен, так как источник не может быть получен из репозитория.
    • ПРИМЕЧАНИЕ: eglibc больше не является частью версии 1.21.0 из-за отсутствия разработки. Смотрите так долго, чтобы eglibc . Используйте glibc по умолчанию. crosstool-ng
  12. Выйдите из инструмента конфигурации, сохранив изменения.
  13. Запустите ct-ng buildв том же каталоге. Подождите некоторое время (около 45 минут в моем случае), и ваш кросс-компилятор должен быть готов.

Кажется, работает отлично!

user13
источник
Вау, 45 минут - это долго. Насколько быстра ваша система? Я жду сейчас.
Jivings
Ну, может быть, это было немного меньше, но сначала нужно скомпилировать все предварительные требования, а после 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}
Jivings
источник
1
Это похоже на gcc-4.5.1.
@ Тибор Это плохо?
Jivings
@Jivings Это полностью не отвечает на вопрос!
Алекс Чемберлен
1
Я не одобряю отрицательных голосов. @AlexChamberlain Он предлагает ценный альтернативный метод, требующий времени для создания собственного набора инструментов.
Jivings
2
@Jivings: Это очень полезно. Между тем это gcc4.7.1 (лучшее, что у меня когда-либо было), и плавающая точка работает сразу. Я не мог заставить работу с плавающей запятой использовать оригинальное описание Криса, которое опубликовал Тибор. Большое спасибо.
4

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

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

Шейн Маккаррон
источник
3

Если вы хотите воспользоваться быстрым хостом для компиляции вещей для вашего RPI, я предлагаю работать в кросс-среде через chroot и QEMU. Это, кстати, заменяет кросс-компилятор без хлопот.

Просто настройте кросс-среду Debian, используя deboostrap / multistrap

(см. главу QEMU / подход debootstrap) и все готово.

Sparkie
источник
3

В случае, если вы собираетесь кросс-компилировать из OS X: вот отличная статья (и единственная, которую я нашел в сети).

Самое замечательное, что автор предоставляет полный скомпилированный набор инструментов , поэтому вам нужно только скачать, распаковать и смонтировать образ dmg. И это все, вы готовы кросс-компиляции.

Антон Матосов
источник
2

Если вы установили Ubuntu 64 bit edition и инструменты от 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 с исправлениями и изменениями для сборки на OS X.

Антон Матосов
источник