Мне нравится использовать gcc для компиляции небольших маленьких программ на C и C ++ на моем главном компьютере. Тем не менее, у меня также есть Raspberry Pi, и, будучи одноядерным компьютером с частотой 700 МГц, я бы предпочел, чтобы мне не приходилось заниматься его разработкой каждый раз, когда я хочу создать для него двоичный файл. Как (поскольку я знаю, что есть способ) я могу кросс-компилировать мою программу для Raspberry Pi, используя мой ноутбук x86? И есть ли способ, которым я могу скомпилировать программы на C (++) на Pi, но создать бинарный файл x86? Если это поможет, «SoC - это Broadcom BCM2835. Он содержит ARM1176JZFS с плавающей запятой ...» (согласно официальному Raspberry Pi FAQ ).
Я не уверен на 100%, но, используя https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/ , вы Можно попробовать: 1) Обязательные библиотеки:
sudo apt-get install g++ git nasm flex bison gawk gperf autoconf automake m4 cvs libtool \
byacc texinfo gettext zlib1g-dev libncurses5-dev git-core build-essential xsltproc libexpat1-dev zip \
autopoint xfonts-utils libxml-parser-perl libproc-processtable-perl default-jre
2) Скомпилировать проект со следующими параметрами, где N - количество ядер вашего процессора x86:
$ PROJECT=RPi ARCH=arm PVR=yes make release -j N
Надеюсь это помогает. `
Официально зарегистрированный метод
https://www.raspberrypi.org/documentation/linux/kernel/building.md (GitHub)
git clone https://github.com/raspberrypi/tools
export PATH="$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}"
printf '#include <stdio.h>\nint main() { puts("hello world"); }\n' > hello_world.c
printf '#include <iostream>\nint main() { std::cout << "hello world" << std::endl; }\n' > hello_world.cpp
arm-linux-gnueabihf-gcc -std=c99 -o hello_world_c hello_world.c
arm-linux-gnueabihf-g++ -std=c++11 -o hello_world_cpp hello_world.cpp
Протестированный в Ubuntu 17.10, инструменты repo в 5caa7046982f0539cf5380f94da04b31129ed521
Используя комбинацию возни в репозиториях apt
и чрезвычайно превосходных Building Embedded Linux Systems (2nd edition, 2008, O'Reilly), я нашел это:
arm-linux-gnueabi-gcc
blockquote>Это и имя команды, и пакет, который вы устанавливаете для ее получения. После вызова он действует точно как «ваниль»
gcc
, за исключением того, что он создает пакеты для архитектуры ARM (или подмножество, включающее, по крайней мере, BCM2835). Построение встроенных систем Linux (стр. 93-94) объясняет, что имена, используемые для вызова инструментов GNU способом кросс-компиляции, имеют следующий формат:cpu-kernel-Manufactureuer -os
blockquote>
-gcc
в конце самого верхнего примера - это компонент , используемый для указания, какую часть изbinutils
вы хотите использовать. Его можно заменить на другой компонент цепочки инструментов GNU, например,ld
(компоновщик) илиas
(ассемблер). Дляarm-linux-gnueabi-gcc
,arm
это архитектура,linux
это ядро,gnueabi
это ОС, аgcc
это компонент. Где производитель? По-видимому, производитель может быть указан как «неизвестный», так как он редко имеет значение, или вообще не учитывается (в том числе это может привести кarm-unknown-linux-gnueabi-gcc
).