Как установить Raspberry Pi cross compiler на мою хост-машину Linux?
Я пытаюсь получить кросс-компиляцию для Raspberry Pi, работающую на моей машине Ubuntu.
Во время моих первых попыток я использовал компилятор arm-linux-gnueabi, который доступен в репо Ubuntu. У меня это работает. Я смог построить все свои зависимости и использовать кросс-компилятор в своем проекте cmake.
Тем не менее, я считаю, что должен использовать версию hf, поэтому я переключился на arm-linux-gnueabihf. Затем я понял, что это не работает с Raspberry Pi, так как это ARMv6 нет.После некоторого гугления я нашел предварительно собранную цепочку инструментов из GitHub.
Я скачал toolchain, но я действительно не понимаю, как его "установить". Я извлекла файлы в свой домашний каталог. Структура каталогов выглядит следующим образом:
/gcc-linearo-arm-linux-gnueabihf-raspbian
/arm-linux-gnueabihf
/bin
(contains g++, gcc, etc)
/lib
(contains libstdc++ library)
/bin
(contains arm-linux-gnueabihf-g++, arm-linux-gnueabihf-...)
/lib
(gcc lib stuff)
Если я изменю каталог на внутреннюю папку bin, я смогу без проблем скомпилировать тестовую программу из терминала.
~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/
arm-linux-gnueabihf/bin$ g++ test.cpp -o test
Затем я попытался скомпилировать тестовую программу во внешнюю папку bin, который содержит префиксные версии инструментов.
~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin$
arm-linux-gnueabihf-g++ test.cpp -o test
Однако, когда я пытаюсь использовать компилятор сейчас (вне внутреннего каталога bin), он не может найти общую библиотеку libstdc++, которая поставляется с цепочкой инструментов:
arm-linux-gnueabihf-gcc: error while loading shared libraries:
libstdc++.so.6: cannot open shared object file: No such file or directory.
Кроме того, я хочу иметь возможность использовать компилятор без необходимости перехода в каталог bin. Поэтому я попытался добавить внешний каталог bin (так как мне нужны префиксные версии) и оба каталога lib в свой путь:
export PATH=$PATH:~/tools/.../bin
export PATH=$PATH:~/tools/.../lib
export PATH=$PATH:~/tools/.../.../lib
Однако, это приводит к той же ошибке. Как я должен "установить" набор инструментов, чтобы я мог использовать набор инструментов отовсюду, так же, как я могу использовать кросс-компиляторы из РЕПО Ubuntu?
7 ответов:
Я постараюсь написать это как учебник для вас, чтобы вам было легко следовать.
Предварительные требования
Перед началом работы необходимо убедиться, что установлено следующее:
apt-get install git rsync cmake ia32-libs
Давайте скрестим пирог!
Начните с создания папки в вашем домашнем каталоге под названиемraspberrypi
.Перейдите в эту папку и потяните вниз всю папку инструментов, которую вы упомянули выше:
git clone git://github.com/raspberrypi/tools.git
Вы хотели бы использовать следующие 3 из них,
gcc-linaro-arm-linux-gnueabihf-raspbian
, если бы я это сделал не читай неправильно.Зайдите в свой домашний каталог и добавьте:
export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
До конца файла с именем
Теперь вы можете либо выйти из системы и войти обратно (т. е. перезапустить сеанс терминала), либо запустить~/.bashrc
. ~/.bashrc
в своем терминале, чтобы забрать дополнениеPATH
в текущем сеансе терминала. Теперь убедитесь, что вы можете получить доступ к компиляторуarm-linux-gnueabihf-gcc -v
. Вы должны получить что-то вроде этого:Using built-in specs. COLLECT_GCC=arm-linux-gnueabihf-gcc COLLECT_LTO_WRAPPER=/home/tudhalyas/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper Target: arm-linux-gnueabihf Configured with: /cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.b uild/src/gcc-linaro-4.7-2012.08/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc- linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-l inux-gnueabihf-raspbian-linux/install --with-sysroot=/cbuild/slaves/oort61/crosstool-ng/builds/ arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fo rtran --disable-multilib --with-arch=armv6 --with-tune=arm1176jz-s --with-fpu=vfp --with-float= hard --with-pkgversion='crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08' --with-bugurl= https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgom p --enable-libssp --with-gmp=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-rasp bian-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oort61/crosstool- ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-mpc =/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux- gnueabihf/build/static --with-ppl=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf -raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oort61/cros stool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --wi th-libelf=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/a rm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/cbuild/slaves/oort61/crosstool-ng/bui lds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --ena ble-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gol d --with-local-prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-li nux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long Thread model: posix gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08 )
Но эй! Я сделал это, а либералы до сих пор не делают. работа!
Мы еще не закончили! До сих пор мы делали только самое основное.
В папке
Теперь вам нужно скопировать весь каталогraspberrypi
создайте папку с именемrootfs
./lib
и/usr
в эту только что созданную папку. Обычно я поднимаю изображение rpi и копирую его через rsync:rsync -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr} $HOME/raspberrypi/rootfs
Где
Теперь нам нужно написать конфигурационный файл192.168.1.PI
заменяется IP вашего Raspberry Pi.cmake
. Откройте~/home/raspberrypi/pi.cmake
в своем любимом редакторе и вставьте следующее:Теперь вы можете компилировать свои программыSET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) SET(CMAKE_C_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc) SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++) SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/raspberrypi/rootfs) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
cmake
, просто добавив этот дополнительный флаг:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake
.Используя cmake hello world пример:
git clone https://github.com/jameskbride/cmake-hello-world.git cd cmake-hello-world mkdir build cd build cmake -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake ../ make scp CMakeHelloWorld pi@192.168.1.PI:/home/pi/ ssh pi@192.168.1.PI ./CMakeHelloWorld
Я не мог заставить компилятор (
x64
version) использоватьsysroot
, пока я не добавилSET(CMAKE_SYSROOT $ENV{HOME}/raspberrypi/rootfs)
кpi.cmake
.
Для Windows host, я хочу настоятельно рекомендовать этот учебник::
- Загрузите и установите toolchain
- синхронизация sysroot с каталогами RPi include / lib
- скомпилируйте свой код
- перетащите исполняемый файл в ваш RPi с помощью SmarTTY
- запускайте его!
Ни больше, ни меньше!
Готовые наборы инструментов GNU, доступные для Raspberry, Beaglebone, Cubieboard, AVR (Atmel) и многих других
Я не смог скомпилировать QT5 ни с одной из (довольно устаревших) цепочек инструментов из git://github.com/raspberrypi / tools.git. сценарий configure продолжал отказывать с ошибкой "не удалось определить архитектуру" и с массивными проблемами пути для каталогов include. То, что сработало для меня, было использование цепочки инструментов Linaro
В сочетании с
Https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Неспособность исправить символьные ссылки sysroot приводит к неопределенным ошибкам символов, как описано здесь: ошибка построения библиотек Qt для raspberry pi Этот это случилось со мной, когда я попробовал скрипт fixQualifiedLibraryPaths из tools.мерзавец. Все остальное подробно описано в http://wiki.qt.io/RaspberryPi2EGLFS . Мои настройки configure были следующими:
./настроить -поддержка OpenGL ES2 прекрасно -устройство Linux-rpi3-г++ -устройство-опция CROSS_COMPILE=/usr/local/rasp/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /usr/местные/рашпиль/sysroot -с открытым исходным кодом -подтверждения лицензии -оптимизированный-то qmake -уменьшить-экспорт-релиза-сделать библиотеки - prefix /usr / local/qt5pi-hostprefix/usr/local / qt5pi
С /usr / local/rasp/sysroot, являющимся путем моей локальной копии системы Raspberry Pi 3 Raspbian (Jessie), и /usr/local/qt5pi, являющимся путем кросс-компиляции QT, который также должен быть скопирован на устройство. Помните, что Jessie поставляется с GCC 4.9.2, когда вы выбираете свою цепочку инструментов.
Первоначальный вопрос был опубликован довольно давно, и за это время Debian добился огромных успехов в области поддержки мультиархивов.
Multiarch-это большое достижение для кросс-компиляции!
В двух словах следующие шаги необходимы для использования multiarch для компиляции Raspbian Jessie cross:
- на вашем Хосте Ubuntu установите Debian Jessie amd64 в контейнере chroot или LXC.
- включить внешнюю архитектуру языка.
- Установите кросс-компилятор из репозитория emdebian tools.
- настройте кросс-компилятор (он будет генерировать код для ARMv7-A по умолчанию), написав пользовательский файл спецификаций gcc.
- Установите библиотеки armhf (libstdc++ и т. д.) из хранилища Raspbian.
- создайте свой исходный код.
Поскольку это большая работа, я автоматизировал вышеописанную настройку. Вы можете прочитать об этом здесь:
Есть IDE CDP Studio, которая делает кросс-компиляцию и развертывание довольно простыми как в windows, так и в linux, и вы можете просто проверить флажок Raspberry toolchain во время установки. (ПС. он имеет поддержку GPIO и I2C, поэтому для доступа к ним не требуется никакого кода)
IDE-демонстрация использования raspberry находится здесь: https://youtu.be/4SVZ68sQz5U
И вы можете скачать IDE здесь: https://cdpstudio.com/home-edition
Я создал последний набор предварительно скомпилированных Raspberry Pi GCC Кросс-компиляторов / собственных двоичных файлов (самый простой метод):
Raspberry Pi GCC Кросс-компиляторы / собственные двоичные файлы (v8.2.0)
К вашим услугам удобный Предкомпилированного малина Пи НКУ Кросс-компиляторы и сэкономить ваше драгоценное время. Никакой компиляции или обработки ошибок не требуется вообще. Просто Извлечение, Ссылка & Наслаждайтесь полной функциональностью GCC (Raspberry Pi) в вашей машине.