Як встановити крос-компілятор Raspberry Pi на моїй хост-машині Linux?


114

Я намагаюся отримати перекомпіляцію для Raspberry Pi, що працює на моїй машині Ubuntu.

Під час моїх первинних спроб я використовував компілятор arm-linux-gnueabi, який доступний у репо-Ubuntu. У мене це працює. Мені вдалося побудувати всі мої залежності та використати крос-компілятор у своєму проекті cmake.

Однак я вважаю, що я повинен використовувати версію hf, тому перейшов на arm-linux-gnueabihf. Тоді я зрозумів, що це не працює з Raspberry Pi, оскільки це armv6.

Після деякого гуглінгу я знайшов заздалегідь побудований ланцюжок інструментів від 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)

Якщо я зміню каталог в папку ІННЕР, я можу без проблем скласти тестову програму з терміналу.

~/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

Однак, коли я намагаюся використовувати компілятор зараз (поза внутрішньою директорією бін), він не в змозі знайти спільну бібліотеку libstdc ++, що постачається з ланцюжком інструментів:

arm-linux-gnueabihf-gcc: error while loading shared libraries: 
libstdc++.so.6: cannot open shared object file: No such file or directory.

Крім того, я хочу мати можливість використовувати компілятор без необхідності переходити до каталогу бін. Тому я спробував додати каталог OUTER bin (оскільки я хочу, щоб встановлені версії) та обидва каталоги lib до моєї PATH:

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

Однак це призводить до тієї ж помилки. Як я повинен "встановити" ланцюжок інструментів, щоб я міг використовувати ланцюжок інструментів звідусіль, як я можу, коли я використовую крос-компілятори з репо Ubuntu?


Спробуйте встановити --sysroot через CMAKE_C {XX} _FLAGS для установки dir.
auselen

Я спробував кілька різних шляхів для --sysroot, але це не допомогло. Я не дуже впевнений, який шлях я повинен вказати для sysroot. Дивіться вище щодо структури каталогів ланцюжка інструментів. Також деякі Googling, схоже, вказують на те, що --sysroot не допомагає для libstdc ++.
pqvst

Я б спробував / gcc-linearo-arm-linux-gnueabihf-raspbian або / gcc-linearo-arm-linux-gnueabihf-raspbian / arm-linux-gnueabihf
auselen

перейдіть сюди startpad.net/gcc-arm-embedded і скачайте тарбол та витяг. Встановіть свій шлях до сміттєвого dir ... зроблено. Або перейдіть на codeourcery.com (тепер графіка наставника), отримайте версію Lite, untar / bz, встановіть свій шлях до бір-редактора ... зроблено.
old_timer

Відповіді:


235

Я спробую написати це як підручник для вас, щоб це стало легко виконувати.

ПРИМІТКА. Цей підручник працює лише для старих малюнків розп. Щодо новішої програми 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

Ви хотіли використати наступне з 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 :

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: попередження: libjpeg.so.8, потрібне /opt/rpi-rootfs/usr/lib/libopencv_highgui.so, не знайдено (спробуйте використовувати -rpath або -rpath-посилання) ". Cmake також , здається, проходить "-Wl, -rpath, / Opt / RPI-кореневої файлової системи / USR / Lib" прапор линкера
user389238

18
ia32-libsПакет не доступний на Ubuntu 13.10. Я використовував libc6-i386 lib32z1 lib32stdc++6замість цього.
Бен Т

2
Чудова відповідь підручника! Майте щедрість :)
andrewdotnich

2
Дякую за ретельний підручник! Поясніть, будь ласка, чому потрібно копіювати / lib / usr папки з пі-машини?
Марчелло

14

Створення для нових Raspbian Debian Buster зображень та ARMv6

Відповідь @Stenyg працює лише для старих графічних зображень. Нещодавно випущений 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 Cross Compiler виводить ARMv7 виконуваний файл замість ARMv6

Налаштуйте ланцюжок інструментів

Не існує офіційного сховища git, що містить оновлений ланцюжок інструментів (див. Https://github.com/raspberrypi/tools/isissue/102 ).

Я створив нове сховище github, яке включає побудову та попередньо складені ланцюги інструментів для ARMv6 на основі GCC8 та новіших:

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

Як уже згадувалося в проекті, це кроки, щоб отримати ланцюжок інструментів. Ви також можете створити його самостійно (детальнішу інформацію див. У розділі 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додаток у поточному сеансі терміналу.

Отримайте бібліотеки з PI Raspberry

Для перехресної компіляції для вашого 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 не знайдено. Після встановлення CMAKE_SYSROOT все працювало бездоганно.
Майкл Гільберт

4

Для хоста Windows я настійно рекомендую цей підручник :

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

Нічого більше, нічого менше!

Попередньо вбудовані ланцюжки інструментів GNU для Raspberry, Beaglebone, Cubieboard, AVR (Atmel) та інших


Редагування, оскільки перший рядок тексту питання був: "Я намагаюся отримати перехресне компілювання для Raspberry Pi, що працює на моїй машині Ubuntu". і я уточнив це на назві. Ця відповідь все ще вітається, але ви також можете відповісти на це за адресою: raspberrypi.stackexchange.com/questions/27163/…, що є більш конкретним.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

4

Ви можете також використовувати кланг . Раніше було швидше, ніж GCC, а зараз це досить стабільна річ. Набагато простіше побудувати кланг з джерел ( ви можете справді випити чашку кави під час збирання ).

Коротко:

  1. Отримати бінарні файли clang (sudo apt-get install clang) .. або завантажити та скласти ( читайте інструкції тут )
  2. Встановіть ваші малинові корені (це можуть бути справжні кореневища, встановлені за допомогою sshfs або зображення).
  3. Складіть свій код:

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

За бажанням ви можете використовувати застарілі бітулі arm-linux-gnueabihf. Тоді ви можете видалити прапор "-fuse-ld = lld" наприкінці.

Нижче розміщений мій файл cmake toolchain.

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 для малинового пі. Це сталося зі мною, коли я спробував сценарій 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 -s / usr / local / rasp / sysroot -opensource -confirm-licence -optimized-qmake -reduce-export -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-контейнер.
  • Увімкніть іноземну архітектуру.
  • Встановіть крос-компілятор із сховища інструментів emdebian.
  • Налаштуйте перехресний компілятор (він би генерував код для ARMv7-A за замовчуванням), написавши спеціальний файл специфікації gcc.
  • Встановіть бібліотеки armhf (libstdc ++ тощо) з сховища Raspbian.
  • Створіть свій вихідний код.

Оскільки це велика робота, я автоматизував вищевказані налаштування. Про це ви можете прочитати тут:

Перехресне складання для Raspbian


1

доступний CDP Studio IDE, що робить крос-компіляцію та розгортання досить простими як з Windows, так і з Linux, і ви можете просто встановити прапорець інструментів малинових інструментів під час встановлення. (PS. У ньому є підтримка GPIO та I2C, тому код не потрібен для доступу до них)

Демо IDE використання малини тут: https://youtu.be/4SVZ68sQz5U

і ви можете завантажити IDE тут: https://cdpstudio.com/home-edition

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.