Как создать инструментальную цепочку GCC 4.7 для кросс-компиляции?
Я уже задал этот вопрос на Stack Overflow, но я хотел бы знать, удалось ли кому-либо построить GCC 4.7 toolchain для кросс-компиляции ARM (для хоста Linux x86 /x86-64). Существует множество инструкций по созданию GCC из исходного кода и многих доступных кросс-компиляторов для версий до 4.7 GCC, но не самых последних.
Компиляция на Rasp Pi сама по себе отлично работает, но для практических целей это слишком медленно.
Я хочу получить компиляцию, и я бы хотел использовать последние и лучшие инструменты.
8 ответов
Я нашел эти инструкции Как создать кросс-компилятор для вашей малины Pi . Это отличная прогулка с помощью инструмента crosstool-ng
, который упрощает настройку сборки кросс-компилятора A LOT (имеет приятный интерфейс на основе проклятий) и поддерживает GCC 4.7.
Я выполнил эти шаги и завершил успешную сборку 4.7 кросс-компилятора.
Предпосылки: Требуются следующие пакеты: bison , flex , gperf , gawk , libtool , automake , g ++ , убедитесь, что они установлены перед продолжением.
- Сначала загрузите
crosstool-ng
из здесь (я использовал версию 1.15.2). - Распакуйте дистрибутив и выполните
./configure
/make
/install
- Создайте новый каталог где-нибудь в файловой системе для сборки и
cd
. - Запустите
ct-ng menuconfig
. Вам будет предоставлен хороший набор меню для настройки вашей сборки. - Перейдите в Пути и разные варианты. Включите Попробуйте функции, помеченные как ЭКСПЕРИМЕНТАЛЬНЫЕ.
-
Выберите подходящий префиксный каталог . Это каталог, в который будут установлены ваши компиляторы и библиотеки (все нормально, просто убедитесь, что каталог пуст).
- ПРИМЕЧАНИЕ. Также важно, чтобы у вас был доступ на запись к выбранной папке
-
Перейдите в меню Целевые параметры .
- Целевая архитектура: рука
- Endianness: немного endian
- Bitness: 32-разрядный
-
Вы также можете установить параметр с плавающей запятой в softfp (см. this для получения дополнительной информации), но hardfp более подходит для Raspbian.
- Перейдите в меню Операционная система и измените Целевая ОС на Linux .
- Перейдите в меню C компилятор и выберите gcc версии 4.7.0 (статья рекомендует Linaro, но мне удалось заставить ее работать с vanilla gcc). Также выберите дополнительные языки, которые вы хотите скомпилировать (C ++, Fortran, ...)
-
Перейдите в меню C-library и выберите его. Значение по умолчанию eglibc , но для меня это не создавало, поэтому я использовал glibc (новейшая версия).
- ПРИМЕЧАНИЕ: во время этапа сборки 13. eglibc может не работать, если subversion не установлена, поскольку источник не может быть извлечен из хранилище
-
ПРИМЕЧАНИЕ: eglibc больше не является частью
crosstool-ng
с версии 1.21.0 из-за его отсутствия развития. См. До тех пор, пока eglibc . Используйте glibc по умолчанию.
- Выйдите из инструмента настройки, сохранив ваши изменения.
- Запустите
ct-ng build
в том же каталоге. Подождите некоторое время (около 45 минут в моем случае), и ваш кросс-компилятор должен быть готов.
Кажется, отлично работает!
Я хочу получить компиляцию, и я бы хотел использовать последние и лучшие инструменты.
На самом деле, новейшие и лучшие инструменты не нужно строить самостоятельно. В 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}
Обратите внимание, что при создании инструментальной цепочки с использованием ct-ng on centos 6.3 в 64-битной системе мне пришлось отменить выбор статической ссылки на libstdc ++, потому что статическая привязка не поддерживалась на платформе (по-видимому).
Кроме того, хотя было бы здорово использовать предварительно собранную инструментальную цепочку из репозитория git, эта цепочка не работает на Centos 6.3 - вероятно, потому, что она построена для более современной системы или чего-то еще. Я действительно не пытался запустить это.
Это руководство может быть полезно.
Это помогло мне разобраться. Я добавил несколько комментариев о настройке.
Если вы собираетесь перекрестно скомпилировать из OS X: полную прекомпилированную инструментальную цепочку , поэтому вам нужно только загрузить, разархивируйте и смонтируйте изображение dmg. И вот, вы готовы перекрестно скомпилировать.
Если вы установили версию битов 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
Если вы хотите воспользоваться быстрым хостом для компиляции вещей для своего RPI, я предлагаю работать в кросс-среде через chroot и QEMU. Это, между прочим, заменяет кросс-компилятор без хлопот.
Просто установите кросс-среду Debian, используя deboostrap /multistrap
(см. раздел QEMU /debootstrap), и все готово.
Carlson-Minot Inc. представляет собой предварительно созданную инструментальную цепочку для целей как для голых, так и для GNU /Linux ARM. Эта инструментальная цепочка основана на инструментальной цепочке Mentor Graphics Sourcery Lite с исправлениями и усами для сборки на OS X. См.