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

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

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

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

77 голосов | спросил Tibor 12 J0000006Europe/Moscow 2012, 23:45:29

8 ответов


57

Я нашел эти инструкции Как создать кросс-компилятор для вашей малины Pi . Это отличная прогулка с помощью инструмента crosstool-ng, который упрощает настройку сборки кросс-компилятора A 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. Перейдите в меню Целевые параметры .

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

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

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

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

ответил user2351160 4 J000000Thursday13 2013, 04:37:28
18
  

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

На самом деле, новейшие и лучшие инструменты не нужно строить самостоятельно. В Raspberry Pi Tool GitHub Repository вы найдете X86_64 и x686 toolchains для программного обеспечения для кросс-компиляции.

Я рекомендую использовать инструментальную цепочку 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

Или для сохранения 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 18 J000000Wednesday12 2012, 14:37:37
4

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

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

ответил Shane McCarron 23 +04002012-10-23T20:19:58+04:00312012bEurope/MoscowTue, 23 Oct 2012 20:19:58 +0400 2012, 20:19:58
3

Это руководство может быть полезно.

Это помогло мне разобраться. Я добавил несколько комментариев о настройке.

ответил Dean Matsen 12 FebruaryEurope/MoscowbThu, 12 Feb 2015 07:46:36 +0300000000amThu, 12 Feb 2015 07:46:36 +030015 2015, 07:46:36
3

Если вы собираетесь перекрестно скомпилировать из OS X: полную прекомпилированную инструментальную цепочку , поэтому вам нужно только загрузить, разархивируйте и смонтируйте изображение dmg. И вот, вы готовы перекрестно скомпилировать.

ответил Anton Matosov 10 J0000006Europe/Moscow 2014, 01:24:10
2

Если вы установили версию битов Ubuntu 64 и инструменты из 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
ответил BirdOfPrey 10 J0000006Europe/Moscow 2013, 03:18:30
2

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

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

(см. раздел QEMU /debootstrap), и все готово.

ответил sparkie 10 J0000006Europe/Moscow 2013, 08:06:59
2

Carlson-Minot Inc. представляет собой предварительно созданную инструментальную цепочку для целей как для голых, так и для GNU /Linux ARM. Эта инструментальная цепочка основана на инструментальной цепочке Mentor Graphics Sourcery Lite с исправлениями и усами для сборки на OS X. См.

ответил Anton Matosov 12 J0000006Europe/Moscow 2014, 11:02:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132