Come compilare i programmi per il Raspberry Pi con gcc?


8

Mi piace usare gcc per compilare piccoli piccoli programmi C e C ++ sul mio computer principale. Tuttavia, ho anche un Raspberry Pi e, essendo un computer single-core a 700 MHz, preferirei non dover fare il mio lavoro di sviluppo su di esso ogni volta che voglio creare un binario per esso. Come (perché so che esiste un modo) devo compilare in modo incrociato il mio programma per il Raspberry Pi usando il mio laptop x86? E c'è un modo in cui posso compilare programmi C (++) sul Pi ma produrre un binario x86? Se è di aiuto, "Il SoC è un BCM2835 Broadcom. Questo contiene un ARM1176JZFS, con virgola mobile ..." (secondo le FAQ ufficiali su Raspberry Pi ).


C'è anche Raspberry PI SE, ecco una domanda che può
portarti

Buona risposta qui: Cross-Compile per ARM?
nobar,

Risposte:


4

Usando una combinazione di frugare nei aptrepository e l'eccellente Building Embedded Linux Systems (2a edizione, 2008, O'Reilly), ho trovato questo:

arm-linux-gnueabi-gcc

Questo è sia il nome del comando che il pacchetto che si installa per acquisirlo. Una volta invocato, agisce esattamente come "vaniglia" gcc, con la sola eccezione che crea pacchetti per l'architettura ARM (o almeno un sottoinsieme che include BCM2835). La creazione di sistemi Linux incorporati (pag. 93-94) spiega che i nomi utilizzati per invocare gli strumenti GNU in modo di compilazione incrociata seguono questo formato:

cpu-kernel-manufactuer-os

Alla -gccfine dell'esempio più in alto c'è il componente , usato per specificare quale parte di binutilste vuoi usare. Può essere sostituito con un altro componente della toolchain GNU, come ld(linker) o as(assemblatore). Perché arm-linux-gnueabi-gcc, armè l'architettura, linuxè il kernel, gnueabiè il sistema operativo ed gccè il componente. Dov'è il produttore? Apparentemente, il produttore può essere specificato come "sconosciuto", poiché raramente fa la differenza, o lasciato fuori del tutto (incluso lo farebbe arm-linux-unknown-gnueabi-gcc).


1

Metodo ufficialmente documentato

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

Testato in Ubuntu 17.10, repository di strumenti su 5caa7046982f0539cf5380f94da04b31129ed521


0

Non sono sicuro al 100%, ma, usando https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/ , potresti provare: 1) Librerie richieste:

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) Compilare il progetto con le seguenti opzioni, dove N è il numero di core della CPU x86:

$ PROJECT=RPi ARCH=arm PVR=yes make release -j N

Spero possa essere d'aiuto. `


Apprezzo lo sforzo, davvero. Sfortunatamente, questo tutorial (e la corrispondente riga di codice) servono per makecompilare un progetto che è stato impostato per usare make ("PROJECT = RPi ARCH = arm PVR = yes make release -j N", il materiale precedente è solo un mazzo di variabili shell). Ora, in realtà make usa gcc, ma per usare la riga di codice fornita dovrei ottenere la fonte di make e quindi cercare la maggior parte di essa cercando le diverse parti del codice che aggiungerebbero gli argomenti necessari a gcc. Grazie per aver provato, però!
quattro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.