Как установить Raspberry Pi cross compiler на моем хост-компьютере Linux?
Я пытаюсь получить кросс-компиляцию для Raspberry Pi, работающей на моей машине Ubuntu.
во время моих первых попыток я использовал компилятор arm-linux-gnueabi, который доступен в репозитории Ubuntu. У меня это работает. Я смог построить все свои зависимости и использовать кросс-компилятор в своем проекте cmake.
тем не менее, я считаю, что я должен использовать версию hf, поэтому я переключился на arm-linux-gnueabihf. Тогда я понял, что это не работает с Raspberry Pi, так как это armv6.
после некоторого Googling, я тогда нашел встроенных инструментов для работы с GitHub.
Я загрузил инструментальную цепочку, но я действительно не понимаю, как ее "установить". Я извлек файлы в свой домашний каталог. Структура каталогов выглядит так:
/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++, которая поставляется с toolchain:
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
однако это приводит к той же ошибке. Как я должен" установить " toolchain, чтобы я мог использовать toolchain отовсюду, так же, как я могу, когда я использую кросс-компиляторы из РЕПО 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 )но эй! Я сделал это, и libs все еще не работает!
мы еще не закончили! До сих пор мы делали только основы.
в своем
raspberrypiпапка, сделайте папку под названиемrootfs.теперь вам нужно скопировать весь
/libи/usrкаталог для этой вновь созданной папки. Я обычно поднимаю изображение rpi и копирую его через rsync:rsync -rl --delete-after --safe-links [email protected]:/{lib,usr} $HOME/raspberrypi/rootfsздесь
192.168.1.PIзаменяется на IP-адрес вашего Raspberry Пи.теперь нам нужно написать
cmakeфайл config. Открой~/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 Привет мир пример:
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 [email protected]:/home/pi/ ssh [email protected] ./CMakeHelloWorld
Я не мог заставить компилятор (
x64версию), чтобы использоватьsysrootпока я не добавилSET(CMAKE_SYSROOT $ENV{HOME}/raspberrypi/rootfs)доpi.cmake.
для хоста Windows, я хочу настоятельно рекомендуем в этом уроке::
- Загрузите и установите toolchain
- синхронизация sysroot с каталогами RPi include/lib
- скомпилировать ваш код
- перетащите исполняемый файл в ваш RPi с помощью SmarTTY
- запустить его!
ни больше, ни меньше!
готовые GNU Toolchains доступны для Raspberry, Beaglebone, Cubieboard, AVR (Atmel) и многое другое
Я не мог скомпилировать QT5 с любой из (довольно устаревших) цепочек инструментов из git://github.com/raspberrypi/tools.git. сценарий настройки продолжал терпеть неудачу с ошибкой "не удалось определить архитектуру" и с массивными проблемами пути для каталогов 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 . Мои настройки настройки были:
./настроить -поддержка 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 -уменьшить-экспорт-релиза-сделать библиотеки -префикс /usr/местные/qt5pi -hostprefix /usr/местные/qt5pi
с /usr/local/rasp /sysroot, являющимся путем моей локальной копии системы Raspberry Pi 3 Raspbian (Jessie) и/usr/local / qt5pi, являющимся путем кросс-скомпилированного QT, который также должен быть скопирован на устройство. Имейте в виду, что Jessie поставляется с GCC 4.9.2, когда вы выбираете свою цепочку инструментов.
первоначальный вопрос был опубликован довольно давно, и в то же время в Debian добилась огромного прогресса в области поддержки multiarch.
Multiarch-это большое достижение для кросс-компиляции!
в двух словах следующие шаги необходимы для использования multiarch для Raspbian Jessie cross compilation:
- на вашем Хосте Ubuntu установите Debian Jessie amd64 в контейнере chroot или LXC.
- включить внешний архитектура языка.
- установите кросс-компилятор из репозитория emdebian tools.
- настроить кросс-компилятор (он будет генерировать код для ARMv7-a по умолчанию), написав пользовательский файл спецификаций gcc.
- установить библиотеки armhf (libstdc++ и др.) из хранилища Raspbian.
- создайте свой исходный код.
Так как это много работы я автоматизировал выше настройки. Вы можете прочитать об этом здесь:
есть CDP Studio IDE доступны, что делает кросс-компиляцию и развертывание довольно просто из windows и linux, и вы можете просто проверить флажок raspberry toolchain во время установки. (ПС. он имеет поддержку GPIO и I2C, поэтому для доступа к ним не требуется код)
демонстрация IDE использования малины находится здесь: https://youtu.be/4SVZ68sQz5U
и вы можете скачать IDE здесь:https://cdpstudio.com/home-edition
Я создал последний набор предварительно скомпилированных Кросс-компиляторов Raspberry Pi GCC / собственных двоичных файлов (самый простой метод):
Raspberry Pi GCC Кросс-компиляторы / собственные двоичные файлы (v8.2.0)
наслаждайтесь беспроблемными предварительно скомпилированными Кросс-компиляторами Raspberry pi GCC и сэкономьте свое драгоценное время. Никакой компиляции или обработки ошибок не требуется вообще. Просто Извлечь, Ссылка & Наслаждайтесь полной функциональностью GCC(Raspberry Pi) в вашей машине.
Comments