Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cross-Compile?

4 views
Skip to first unread message

Bernd

unread,
Dec 13, 2017, 4:37:38 AM12/13/17
to
Hi,

ich möchte icinga2 auf dem RasPi2b kompilieren obwohl mein Know-How in
dieser Richtung eher bescheiden ist.
Beim Kompilieren bricht make zwischen 30% und 50% mit der Meldung 'Out
of memory' ab. OK das bedeutet dann wohl zu wenig RAM. RAM-Aufrüstung
ist wohl nicht angesagt, also könnte man auf einem andern System
kompilieren und die Binary später auf den RasPi kopieren. Da aber der
RasPi (armv7l) und meine anderen Rechner (x86_64) eine unterschiedliche
CPU-Architektur haben wird das wohl weitere Schritte erfordern.

Was muss ich tun um auf einer x86_64 CPU so zu kompilieren, dass das
Ergebnis später auf einem RasPi läuft? Ich habe da den begriff
'Cross-Compile' im Ohr, aber weiter und wie ...?

Hat jemand einen Hinweis auf ein -möglichst passendes- Tutorial? Oder
gar Lust das hier zu erläutern?

Irgendwie muss der Compiler ja dabei auf x86_64 laufen aber Code für
armv7l erzeugen ... oder wie macht man das?

Bernd

Juergen Ilse

unread,
Dec 13, 2017, 5:23:09 AM12/13/17
to
Hallo,

Bernd <bna...@web.de> wrote:
> ich möchte icinga2 auf dem RasPi2b kompilieren obwohl mein Know-How in
> dieser Richtung eher bescheiden ist.
> Beim Kompilieren bricht make zwischen 30% und 50% mit der Meldung 'Out
> of memory' ab. OK das bedeutet dann wohl zu wenig RAM. RAM-Aufrüstung
> ist wohl nicht angesagt,

Du koenntest mittels Swap den *virtuellen* Speicher des Raspi aufruesten,
auch wenn das auf dem kleinen zu *erheblichen* Performanceverlusten fuehren
duerfte (da "Massenspeicherzugriff" auf dem Raspi eher nicht sehr schnell
ist ...).

> also könnte man auf einem andern System kompilieren und die Binary später
> auf den RasPi kopieren. Da aber der RasPi (armv7l) und meine anderen
> Rechner (x86_64) eine unterschiedliche CPU-Architektur haben wird das
> wohl weitere Schritte erfordern.

Du musst einen CRosscompiler verwenden (d.h. ein Compiler, der auf X86_64
laeuft, aber Code fuer ARMv7L erzeugt, dazu einen passenden Linker, passende
Libraries, dazugehoerige include-Dateien, ... und natuerlich das ganze so
konfigurieren, dass in der Crosscompile-Umgebung niemals versucht wird, auf
die X86_64 include-Dateien zuzugreifen und/oder gegen die x86_64 libraries
zu linken ...).

> Was muss ich tun um auf einer x86_64 CPU so zu kompilieren, dass das
> Ergebnis später auf einem RasPi läuft? Ich habe da den begriff
> 'Cross-Compile' im Ohr, aber weiter und wie ...?

Siehe oben: du benoetigst eine "Crossentwicklungsumgebung" wie oben
beschreieben. Ich habe vor Jahren mal eine gebaut, um damit einen
Gnat ADA compiler fuer ARM zu bauen (der Gnat benoetigt einen Gnat
zum compilieren, mann muss also bereits einen solchen ADA compiler
laufen haben, um einen solchen ADA compiler zu uebersetzen, das hatte
ich damals mit einem selbst gebauten Gnat Crosscompiler gemacht, aber
das war ganz schoen aufwendig ...).

> Irgendwie muss der Compiler ja dabei auf x86_64 laufen aber Code für
> armv7l erzeugen ... oder wie macht man das?

Wenn man nicht einen Crosscompiler dafuer irgendwo anders herbekommt,
muss man sich selbst einen bauen. Das kann aber relativ aufwendig werden ...
Dem Raspi ausreichend viel Swap dazuzukonfigurieren duerfte einfacher
sein ...

Tschuess,
Juergen Ilse (jue...@usenet-verwaltung.de)

Bernd

unread,
Dec 13, 2017, 5:47:55 AM12/13/17
to
Hallo Jürgen,

danke für die schnellen Infos:

Am 13.12.2017 um 11:23 schrieb Juergen Ilse:
(...)
> Wenn man nicht einen Crosscompiler dafuer irgendwo anders herbekommt,
> muss man sich selbst einen bauen. Das kann aber relativ aufwendig werden ...
> Dem Raspi ausreichend viel Swap dazuzukonfigurieren duerfte einfacher
> sein ...

Selbst bauen scheidet wohl mangels Wissen aus ... Aber wonach muss ich
suchen?

Ah hier: cross-armv7hl-gcc48-icecream-backend und cross-arm-binutils
(brauche ich die binutils auch?)

Mal gucken was die Doku sagt ...

Hast Du damit schon mal gearbeitet und kannst hilfreiche Tipps zur
Nutzung geben?

Bernd

Bernd

unread,
Dec 13, 2017, 8:04:04 AM12/13/17
to
Hallo Jürgen,

Am 13.12.2017 um 11:23 schrieb Juergen Ilse:
(...)
> Du koenntest mittels Swap den *virtuellen* Speicher des Raspi aufruesten,
> auch wenn das auf dem kleinen zu *erheblichen* Performanceverlusten fuehren
> duerfte (da "Massenspeicherzugriff" auf dem Raspi eher nicht sehr schnell
> ist ...).
(...)
> Dem Raspi ausreichend viel Swap dazuzukonfigurieren duerfte einfacher
> sein ...

Perfekter Tipp!

Das war einfach und hat bestens ausgereicht. Es war wohl nur ein File
was soviel Speicher benötigte.

Bernd

Rainer Weikusat

unread,
Dec 13, 2017, 11:08:09 AM12/13/17
to
Bernd <bna...@web.de> writes:
> Hallo Jürgen,
>
> danke für die schnellen Infos:
>
> Am 13.12.2017 um 11:23 schrieb Juergen Ilse:
> (...)
>> Wenn man nicht einen Crosscompiler dafuer irgendwo anders herbekommt,
>> muss man sich selbst einen bauen. Das kann aber relativ aufwendig werden ...
>> Dem Raspi ausreichend viel Swap dazuzukonfigurieren duerfte einfacher
>> sein ...
>
> Selbst bauen scheidet wohl mangels Wissen aus ... Aber wonach muss ich
> suchen?

So kompliziert ist das nicht.

http://www.cis.upenn.edu/~milom/cross-compile.html
http://linux.bytesex.org/cross-compiler.html


> Ah hier: cross-armv7hl-gcc48-icecream-backend und cross-arm-binutils
> (brauche ich die binutils auch?)

Compiler, Binutils und alle benoetigten Bibliotheken, in jedem Fall eine
passende C library.

Marcel Mueller

unread,
Dec 13, 2017, 6:50:00 PM12/13/17
to
On 13.12.17 10.37, Bernd wrote:
> Beim Kompilieren bricht make zwischen 30% und 50% mit der Meldung 'Out
> of memory' ab. OK das bedeutet dann wohl zu wenig RAM. RAM-Aufrüstung
> ist wohl nicht angesagt, also könnte man auf einem andern System
> kompilieren und die Binary später auf den RasPi kopieren. Da aber der
> RasPi (armv7l) und meine anderen Rechner (x86_64) eine unterschiedliche
> CPU-Architektur haben wird das wohl weitere Schritte erfordern.

Ja, cross-compiler installieren. Für die Pi2 ist das AFAIR
gcc-arm-linux-gnueabi. Ggf. noch ein paar Libraries dazu, falls er sie
vermisst.
BTDTMT, denn einen Raspbian-Kernel will man auch nicht auf einem Pi
compilieren.

> Was muss ich tun um auf einer x86_64 CPU so zu kompilieren, dass das
> Ergebnis später auf einem RasPi läuft? Ich habe da den begriff
> 'Cross-Compile' im Ohr, aber weiter und wie ...?

Ja, checke mal nach Anleitungen dazu im Netz, Stichworte Raspberry Pi
Cross Compile.
Falls das Zielprogramm cmake nutzt, sollte es ferner einen passenden
cmake-Parameter genau dafür geben.

> Irgendwie muss der Compiler ja dabei auf x86_64 laufen aber Code für
> armv7l erzeugen ... oder wie macht man das?

Genau so. Das ist bei gcc mehr oder minder ein Standard-Feature.


Marcel
0 new messages