Wie kompiliere ich Programme für den Raspberry Pi mit gcc?


8

Ich verwende gerne gcc, um kleine C- und C ++ - Programme auf meinem Hauptcomputer zu kompilieren. Ich habe jedoch auch einen Raspberry Pi, und da ich ein 700-MHz-Single-Core-Computer bin, würde ich es vorziehen, nicht jedes Mal meine Entwicklungsarbeit daran ausführen zu müssen, wenn ich eine Binärdatei dafür erstellen möchte. Wie (denn ich weiß, dass es einen Weg gibt) kompiliere ich mein Programm für den Raspberry Pi mit meinem x86-Laptop? Und gibt es eine Möglichkeit, C (++) - Programme auf dem Pi zu kompilieren, aber eine x86-Binärdatei zu erstellen? Wenn es Hilfe gibt, "Der SoC ist ein Broadcom BCM2835. Dieser enthält einen ARM1176JZFS mit Gleitkomma ..." (gemäß den offiziellen Raspberry Pi FAQ ).


Es gibt auch Raspberry PI SE, hier ist eine Frage, die Sie auf den richtigen Weg bringen kann: raspberrypi.stackexchange.com/questions/192/…
Lekensteyn

Gute Antwort hier: Cross-Compile für ARM?
Nobar

Antworten:


4

Mit einer Kombination aus Stöbern in den aptRepositories und den äußerst hervorragenden Building Embedded Linux-Systemen (2. Ausgabe, 2008, O'Reilly) fand ich Folgendes:

arm-linux-gnueabi-gcc

Dies ist sowohl der Name des Befehls als auch das Paket, das Sie installieren, um ihn abzurufen. Einmal aufgerufen, fungiert es genau als "Vanille" gcc, mit der einzigen Ausnahme, dass es Pakete für die ARM-Architektur (oder zumindest eine Teilmenge einschließlich des BCM2835) erstellt. Beim Erstellen eingebetteter Linux-Systeme (S. 93-94) wird erläutert, dass die Namen, die zum Aufrufen der GNU-Tools in einer kompilierungsübergreifenden Weise verwendet werden, diesem Format folgen:

CPU-Kernel-Hersteller-OS

Am -gccEnde des obersten Beispiels befindet sich die Komponente , mit der angegeben wird, welcher Teil von binutilsIhnen verwendet werden soll. Es kann gegen eine andere GNU-Toolchain-Komponente wie ld(Linker) oder as(Assembler) ausgetauscht werden . Für arm-linux-gnueabi-gcc, armdie Architektur ist, linuxist der Kern, gnueabiist das Betriebssystem, und gccist die Komponente. Wo ist der Hersteller? Anscheinend kann der Hersteller als "unbekannt" angegeben werden, da dies selten einen Unterschied macht, oder ganz weggelassen werden (einschließlich des Unterschieds arm-linux-unknown-gnueabi-gcc).


1

Offiziell dokumentierte Methode

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

Getestet in Ubuntu 17.10, Tools Repo bei 5caa7046982f0539cf5380f94da04b31129ed521


0

Ich bin mir bei 100% nicht sicher, aber mit https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/ können Sie Folgendes versuchen: 1) Erforderliche Bibliotheken:

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) Kompilieren Sie das Projekt mit den folgenden Optionen, wobei N die Anzahl der Kerne Ihrer x86-CPU ist:

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

Ich hoffe, es hilft. `


Ich schätze die Mühe, die ich wirklich mache. Leider dient dieses Tutorial (und die entsprechende Codezeile) makezum Kompilieren eines Projekts, das für die Verwendung von make eingerichtet wurde ("PROJECT = RPi ARCH = arm PVR = yes make release -j N") Bündel von Shell-Variablen). In Wirklichkeit make wird gcc verwendet, aber um die bereitgestellte Codezeile zu verwenden, müsste ich die Quelle von make ermitteln und dann den größten Teil davon durchsuchen, um nach den verschiedenen Teilen des Codes zu suchen, die die erforderlichen Argumente zu gcc hinzufügen würden. Vielen Dank, dass Sie es versucht haben!
Fouric
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.