Как установить кросс-компилятор Raspberry Pi на мою хост-машину Linux?

114

Я пытаюсь выполнить кросс-компиляцию для Raspberry Pi, работающего на моем компьютере с Ubuntu.

Во время первых попыток я использовал компилятор arm-linux-gnueabi, который доступен в репозитории Ubuntu. У меня это работает. Я смог построить все свои зависимости и использовать кросс-компилятор в моем проекте cmake.

Однако я считаю, что мне следует использовать версию hf, поэтому я переключился на arm-linux-gnueabihf. Потом я понял, что это не работает с Raspberry Pi, так как это armv6.

После некоторого поиска в Google я нашел готовую цепочку инструментов от 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)

Если я перейду в папку INNER bin, я смогу без проблем скомпилировать тестовую программу с терминала.

~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/
arm-linux-gnueabihf/bin$ g++ test.cpp -o test

Затем я попытался скомпилировать тестовую программу в папке OUTER 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 в свой PATH:

export PATH=$PATH:~/tools/.../bin
export PATH=$PATH:~/tools/.../lib
export PATH=$PATH:~/tools/.../.../lib

Однако это приводит к той же ошибке. Как мне «установить» инструментальную цепочку, чтобы я мог использовать инструментальную цепочку отовсюду, точно так же, как я могу использовать кросс-компиляторы из репозитория Ubuntu?

pqvst
источник
Попробуйте установить --sysroot через CMAKE_C {XX} _FLAGS, чтобы установить каталог.
Auselen 03
Я пробовал использовать разные пути для --sysroot, но это не помогло. Я не совсем уверен, какой путь я должен указать для sysroot. См. Выше о структуре каталогов инструментальной цепочки. Кроме того, некоторые поисковые запросы, похоже, указывают на то, что --sysroot не помогает для libstdc ++.
pqvst 04
Я бы попробовал либо / gcc-linearo-arm-linux-gnueabihf-raspbian, либо / gcc-linearo-arm-linux-gnueabihf-raspbian / arm-linux-gnueabihf
auselen
перейдите сюда launchpad.net/gcc-arm-embedded, скачайте архив и распакуйте его. Задайте путь к каталогу bin ... готово. Или перейдите на codeourcery.com (теперь наставник графика), получите облегченную версию, untar / bz, укажите путь к каталогу bin ... готово.
old_timer 08
По теме RPI SE: raspberrypi.stackexchange.com/questions/64273/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Ответы:

235

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

ПРИМЕЧАНИЕ. Это руководство работает только для старых образов raspbian. Для нового Raspbian на основе Debian Buster см. Следующие инструкции в этой теме: https://stackoverflow.com/a/58559140/869402

Предварительно требования

Перед тем, как начать, вам необходимо убедиться, что установлено следующее:

apt-get install git rsync cmake ia32-libs

Давайте кросс-компилируем пирог!

Начните с создания папки в вашем домашнем каталоге с именем raspberrypi.

Войдите в эту папку и вытащите всю папку с инструментами, которую вы упомянули выше:

git clone git://github.com/raspberrypi/tools.git

Вы хотели использовать следующие из трех 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
Стеныг
источник
4
Я шаг за шагом следил за вашим руководством и теперь могу компилировать без ошибок. Спасибо! Большое спасибо за пример cmake.
pqvst
1
Это хорошо работает для простых проектов, но я не могу скомпилировать свой проект CMAKE, который зависит от opencv. Я получаю следующую ошибку "/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../ .. /../../arm-linux-gnueabihf/bin/ld: warning: libjpeg.so.8, требуется /opt/rpi-rootfs/usr/lib/libopencv_highgui.so, не найден (попробуйте использовать -rpath или -rpath-ссылка) ". Cmake также, похоже, передает компоновщику флаг "-Wl, -rpath, / opt / rpi-rootfs / usr / lib"
user389238
18
ia32-libsПакет не доступен на Ubuntu 13.10. Я использовал libc6-i386 lib32z1 lib32stdc++6вместо этого.
Ben T
2
Отличный учебный ответ!
Получите
2
Спасибо за подробное руководство! Не могли бы вы объяснить, зачем нужно копировать папки / lib / usr с машины pi?
Марчелло
14

Сборка новых образов Raspbian Debian Buster и ARMv6

Ответ @Stenyg работает только для старых изображений Raspbian. Недавно выпущенный Raspbian на основе Debian Buster требует обновленного набора инструментов:

В Debian Buster компилятор gcc и glibc были обновлены до версии 8.3. Набор инструментов по- git://github.com/raspberrypi/tools.gitпрежнему основан на более старой версии gcc 6. Это означает, что использование git://github.com/raspberrypi/tools.gitприведет к множеству ошибок компиляции.

Это руководство основано на ответе @Stenyg. В дополнение ко многим другим решениям в Интернете, это руководство также поддерживает более старые Rasperry Pi (A, B, B +, Zero ) на базе процессора ARMv6. См. Также: Кросс-компилятор GCC 8 выводит исполняемый файл ARMv7 вместо ARMv6

Настроить набор инструментов

Не существует официального репозитория git, содержащего обновленную цепочку инструментов (см. Https://github.com/raspberrypi/tools/issues/102 ).

Я создал новый репозиторий github, который включает в себя сборку и предварительно скомпилированные наборы инструментов для ARMv6 на основе GCC8 и новее:

https://github.com/Pro/raspi-toolchain

Как упоминалось в файле readme проекта, это шаги для получения набора инструментов. Вы также можете создать его самостоятельно (подробности см. В README).

  1. Загрузите набор инструментов:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Извлеките это. Примечание: цепочка инструментов должна быть включена, /opt/cross-pi-gccпоскольку она не зависит от местоположения.
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. Вы сделали! Набор инструментов теперь в/opt/cross-pi-gcc

  2. Необязательно, добавьте цепочку инструментов к своему пути, добавив:

export PATH=$PATH:/opt/cross-pi-gcc/bin

в конец файла с именем ~/.bashrc

Теперь вы можете либо выйти из системы и снова войти в систему (т.е. перезапустить сеанс терминала), либо запустить . ~/.bashrcв своем терминале, чтобы выбрать PATHдобавление в текущем сеансе терминала.

Получите библиотеки от Raspberry PI

Чтобы выполнить кросс-компиляцию для вашего собственного Raspberry Pi, в котором могут быть установлены некоторые пользовательские библиотеки, вам необходимо разместить эти библиотеки на своем хосте.

Создайте папку $HOME/raspberrypi. В своей raspberrypiпапке создайте папку с именем rootfs.

Теперь вам нужно скопировать весь /libи /usrкаталог в эту вновь созданную папку. Обычно я загружаю изображение rpi и копирую его через rsync:

rsync -vR --progress -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr,opt/vc/lib} $HOME/raspberrypi/rootfs

где 192.168.1.PIзаменяется IP-адресом вашего Raspberry Pi.

Используйте CMake для компиляции вашего проекта

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

Получите этот файл инструментальной цепочки отсюда: https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

Теперь вы сможете компилировать свои cmakeпрограммы, просто добавив этот дополнительный флаг: -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmakeи установив правильные переменные среды:

export RASPBIAN_ROOTFS=$HOME/raspberry/rootfs
export PATH=/opt/cross-pi-gcc/bin:$PATH
export RASPBERRY_VERSION=1
cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberry/Toolchain-rpi.cmake ..

Здесь показан пример приветственного мира: https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh

Стефан Профантер
источник
Я получаю сообщения «игнорирование небезопасной символической ссылки» во время rsync. Это нормально?
Александр Зарубкин
Все должно быть в порядке. Это из-за --safe-linksаргумента
Стефан Профантер
К сожалению, я не могу проверить это для raspi 4, но поскольку исполняемые файлы из более старого Raspi обычно также могут выполняться на более новом Raspi, это также должно работать. Если кто-то может протестировать это, я рад обновить описание
Стефан Профантер
Привет, @StefanProfanter, как можно сделать путь инструментальной цепочки независимым, чтобы поместить его в путь, отличный от /opt/cross-pi-gcc ?
nass
@nass к сожалению нет. Я не специалист по кросс-компиляторам. Если у кого-то есть больше информации и информации по этому поводу, я был бы рад обновить свое репо! Может быть, вы сможете создать новый вопрос о Stackoverflow.
Стефан Профантер
5

Я не мог получить компилятор ( x64версии) , чтобы использовать , sysrootпока я не добавил SET(CMAKE_SYSROOT $ENV{HOME}/raspberrypi/rootfs)к pi.cmake.

Андреас
источник
Я мог бы запустить пример Hello World без набора CMAKE_SYSROOT, но при попытке использовать файл pi.cmake с проектом, который использует общую библиотеку, я получил ошибку компоновщика libstdc ++. So.6 not found. После того, как я установил CMAKE_SYSROOT, все заработало безупречно.
Майкл Гилберт
4

Для хоста Windows я очень рекомендую этот учебник :

  • Загрузите и установите набор инструментов
  • Синхронизация sysroot с каталогами include / lib вашего RPi
  • Скомпилируйте свой код
  • Перетащите исполняемый файл на свой RPi с помощью SmarTTY
  • Запустить его!

Ни больше ни меньше!

Готовые наборы инструментов GNU доступны для Raspberry, Beaglebone, Cubieboard, AVR (Atmel) и др.

SBF
источник
Редактирование, так как первая строка тела вопроса гласила: «Я пытаюсь выполнить кросс-компиляцию для Raspberry Pi, работающего на моей машине с Ubuntu». и я уточнил это по названию. Этот ответ по-прежнему приветствуется, но вы также можете ответить на него по адресу: raspberrypi.stackexchange.com/questions/27163/… что более конкретно.
Чиро Сантилли 郝海东 冠状 病 六四 事件
4

Вы также можете использовать clang . Раньше он был быстрее, чем GCC, а теперь это довольно стабильная вещь. Строить clang из исходников намного проще ( вы действительно можете выпить чашку кофе в процессе сборки ).

Коротко:

  1. Получите двоичные файлы clang (sudo apt-get install clang) .. или загрузите и соберите ( читайте инструкции здесь )
  2. Смонтируйте вашу raspberry rootfs (это могут быть настоящие rootfs, смонтированные через sshfs, или образ).
  3. Скомпилируйте свой код:

    path/to/clang --target=arm-linux-gnueabihf --sysroot=/some/path/arm-linux-gnueabihf/sysroot my-happy-program.c -fuse-ld=lld

При желании вы можете использовать устаревший binutils arm-linux-gnueabihf. Затем вы можете убрать в конце флаг "-fuse-ld = lld".

Ниже мой файл инструментальной цепочки cmake.

toolchain.cmake

set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# Custom toolchain-specific definitions for your project
set(PLATFORM_ARM "1")
set(PLATFORM_COMPILE_DEFS "COMPILE_GLES")

# There we go!
# Below, we specify toolchain itself!

set(TARGET_TRIPLE arm-linux-gnueabihf)

# Specify your target rootfs mount point on your compiler host machine
set(TARGET_ROOTFS /Volumes/rootfs-${TARGET_TRIPLE})

# Specify clang paths
set(LLVM_DIR /Users/stepan/projects/shared/toolchains/llvm-7.0.darwin-release-x86_64/install)
set(CLANG ${LLVM_DIR}/bin/clang)
set(CLANGXX ${LLVM_DIR}/bin/clang++)

# Specify compiler (which is clang)
set(CMAKE_C_COMPILER   ${CLANG})
set(CMAKE_CXX_COMPILER ${CLANGXX})

# Specify binutils

set (CMAKE_AR      "${LLVM_DIR}/bin/llvm-ar" CACHE FILEPATH "Archiver")
set (CMAKE_LINKER  "${LLVM_DIR}/bin/llvm-ld" CACHE FILEPATH "Linker")
set (CMAKE_NM      "${LLVM_DIR}/bin/llvm-nm" CACHE FILEPATH "NM")
set (CMAKE_OBJDUMP "${LLVM_DIR}/bin/llvm-objdump" CACHE FILEPATH "Objdump")
set (CMAKE_RANLIB  "${LLVM_DIR}/bin/llvm-ranlib" CACHE FILEPATH "ranlib")

# You may use legacy binutils though.
#set(BINUTILS /usr/local/Cellar/arm-linux-gnueabihf-binutils/2.31.1)
#set (CMAKE_AR      "${BINUTILS}/bin/${TARGET_TRIPLE}-ar" CACHE FILEPATH "Archiver")
#set (CMAKE_LINKER  "${BINUTILS}/bin/${TARGET_TRIPLE}-ld" CACHE FILEPATH "Linker")
#set (CMAKE_NM      "${BINUTILS}/bin/${TARGET_TRIPLE}-nm" CACHE FILEPATH "NM")
#set (CMAKE_OBJDUMP "${BINUTILS}/bin/${TARGET_TRIPLE}-objdump" CACHE FILEPATH "Objdump")
#set (CMAKE_RANLIB  "${BINUTILS}/bin/${TARGET_TRIPLE}-ranlib" CACHE FILEPATH "ranlib")

# Specify sysroot (almost same as rootfs)
set(CMAKE_SYSROOT ${TARGET_ROOTFS})
set(CMAKE_FIND_ROOT_PATH ${TARGET_ROOTFS})

# Specify lookup methods for cmake
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# Sometimes you also need this:
# set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# Specify raspberry triple
set(CROSS_FLAGS "--target=${TARGET_TRIPLE}")

# Specify other raspberry related flags
set(RASP_FLAGS "-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS")

# Gather and distribute flags specified at prev steps.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CROSS_FLAGS} ${RASP_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CROSS_FLAGS} ${RASP_FLAGS}")

# Use clang linker. Why?
# Well, you may install custom arm-linux-gnueabihf binutils,
# but then, you also need to recompile clang, with customized triple;
# otherwise clang will try to use host 'ld' for linking,
# so... use clang linker.
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld)
Степан Дятьковский
источник
2

Мне не удалось скомпилировать QT5 ни с одним (довольно устаревшим) набором инструментов из git: //github.com/raspberrypi/tools.git. Сценарий настройки продолжал давать сбой с ошибкой «не удалось определить архитектуру» и с серьезными проблемами пути для подключаемых каталогов. Что сработало для меня, так это использование набора инструментов Linaro

http://releases.linaro.org/components/toolchain/binaries/4.9-2016.02/arm-linux-gnueabihf/runtime-linaro-gcc4.9-2016.02-arm-linux-gnueabihf.tar.xz

в комбинации с

https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py

Неспособность исправить символические ссылки sysroot приводит к неопределенным символьным ошибкам, как описано здесь: Ошибка при создании библиотек Qt для raspberry pi. Это случилось со мной, когда я попробовал скрипт fixQualifiedLibraryPaths из tools.git. Все остальное подробно описано в http://wiki.qt.io/RaspberryPi2EGLFS . Мои настройки конфигурации были:

./configure -opengl es2 -device linux-rpi3-g ++ -device-option CROSS_COMPILE = / usr / local / rasp / gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf / bin / arm-linux-gnueabihf- -sysroot / usr / local / rasp / sysroot -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -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, когда вы выбираете свою инструментальную цепочку.

манжета
источник
2

Первоначальный вопрос был опубликован довольно давно, а тем временем Debian значительно продвинулся в области поддержки мультиархитектурности.

Мультиархия - отличное достижение для кросс-компиляции!

Вкратце, для использования мультиархитектуры для кросс-компиляции Raspbian Jessie требуются следующие шаги:

  • На вашем хосте Ubuntu установите Debian Jessie amd64 в chroot или контейнере LXC.
  • Включите стороннюю архитектуру armhf.
  • Установите кросс-компилятор из репозитория инструментов emdebian.
  • Настройте кросс-компилятор (по умолчанию он будет генерировать код для ARMv7-A), написав собственный файл спецификаций gcc.
  • Установите библиотеки armhf (libstdc ++ и др.) Из репозитория Raspbian.
  • Создайте свой исходный код.

Поскольку это большая работа, я автоматизировал вышеуказанную настройку. Вы можете прочитать об этом здесь:

Кросс-компиляция для Raspbian

Маттиас Люшер
источник
1

доступна IDE CDP Studio, которая упрощает кросс-компиляцию и развертывание как из Windows, так и из Linux, и вы можете просто установить флажок Raspberry Toolchain во время установки. (PS. Он имеет поддержку GPIO и I2C, поэтому для доступа к ним код не требуется)

Демонстрация использования малины в IDE находится здесь: https://youtu.be/4SVZ68sQz5U

и вы можете скачать IDE здесь: https://cdpstudio.com/home-edition

Юри Т.
источник