Как кросс-компилировать программы для Raspberry Pi с помощью gcc?

Мне нравится использовать gcc для компиляции небольших маленьких программ на C и C ++ на моем главном компьютере. Тем не менее, у меня также есть Raspberry Pi, и, будучи одноядерным компьютером с частотой 700 МГц, я бы предпочел, чтобы мне не приходилось заниматься его разработкой каждый раз, когда я хочу создать для него двоичный файл. Как (поскольку я знаю, что есть способ) я могу кросс-компилировать мою программу для Raspberry Pi, используя мой ноутбук x86? И есть ли способ, которым я могу скомпилировать программы на C (++) на Pi, но создать бинарный файл x86? Если это поможет, «SoC - это Broadcom BCM2835. Он содержит ARM1176JZFS с плавающей запятой ...» (согласно официальному Raspberry Pi FAQ ).

8
задан 26 November 2012 в 09:19

3 ответа

Я не уверен на 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

Надеюсь это помогает. `

0
ответ дан 26 November 2012 в 09:19

Официально зарегистрированный метод

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

1
ответ дан 26 November 2012 в 09:19

Используя комбинацию возни в репозиториях apt и чрезвычайно превосходных Building Embedded Linux Systems (2nd edition, 2008, O'Reilly), я нашел это:

arm-linux-gnueabi-gcc

Это и имя команды, и пакет, который вы устанавливаете для ее получения. После вызова он действует точно как «ваниль» gcc, за исключением того, что он создает пакеты для архитектуры ARM (или подмножество, включающее, по крайней мере, BCM2835). Построение встроенных систем Linux (стр. 93-94) объясняет, что имена, используемые для вызова инструментов GNU способом кросс-компиляции, имеют следующий формат:

cpu-kernel-Manufactureuer -os

-gcc в конце самого верхнего примера - это компонент , используемый для указания, какую часть из binutils вы хотите использовать. Его можно заменить на другой компонент цепочки инструментов GNU, например, ld (компоновщик) или as (ассемблер). Для arm-linux-gnueabi-gcc, arm это архитектура, linux это ядро, gnueabi это ОС, а gcc это компонент. Где производитель? По-видимому, производитель может быть указан как «неизвестный», так как он редко имеет значение, или вообще не учитывается (в том числе это может привести к arm-unknown-linux-gnueabi-gcc).

0
ответ дан 26 November 2012 в 09:19

Другие вопросы по тегам:

Похожие вопросы: