Forum: Compiler & IDEs Cross Build für Raspberry Pi / ncurses


von Michael K. (Gast)


Lesenswert?

Hallo zusammen,

ich habe einen Raspberry Pi, für den ich unter Linux (Fedora 21, 64bit) 
entwickeln möchte. Dazu habe ich die Cross Compiler Toolchain 
(gcc-linaro-arm-linux-gnueabihf-raspbian-x64) installiert und unter 
Codeblocks eingerichtet. Ein kleines HalloWelt für die Konsole kann ich 
bauen und auf den Raspi übertragen, wo es auch läuft. Soweit alles grün.

Nun will ich aber z.B. ncurses für meine Anwendung verwenden, und da 
hört es bei mir auf. Die ncurses-libs gibt es sowohl für den Raspi als 
auch für Fedora, aber wie richte ich es auf dem PC so ein, daß ich damit 
auch eine cross-compile hinbekomme?
Ein include von ncurses.h bringt den Compiler zu der Erkenntnis, daß er 
ncurses.h nicht findet. Irgendwie auch klar, die ist wohl nicht Teil der 
Toolchain. Nur, wie bekomme ich die da rein?

Vielen Dank schon mal,

Michael

von derguteweka (Gast)


Lesenswert?

Moin,

Ich weiss nicht, ob das das "amtliche Vorgehen" ist, aber ich wuerd' 
erst mal nachgucken, was fuer include-Pfade dein crosscompiler eingebaut 
hat - mittels:

arm-bla-blupp-gcc -v hello.c

Und dann ein ncurses aus den sourcen so crosscompilieren und/oder 
installieren, dass die ncurses header in dem "richtigen" include-Pfad 
des gcc auftauchen. Koennt' mir vorstellen, dass der cross-gcc evtl. 
sowas wie /opt/target/usr/include oder sowas eingebaut hat.

Aber: Ich weiss nicht, ob das der "richtige" Weg ist.

Gruss
WK

von Markus F. (blackflip)


Angehängte Dateien:

Lesenswert?

Huhu, zum compilieren brauchst du natürlich die lib für den Raspberry 
und du musst in den Projektoptionen eintragen welche zusätzlichen 
Parameter er für gcc nutzen soll.

Im Anhang habe ich ein Beispiel wie es für die Mysql libs gemacht werden 
musste. Mit Ncurses habe ich so noch nicht gearbeitet.
Edit: Ich sehe gerade das man dort auch direkt libaries verlinken kann. 
Dann kannst du das ja einmal mit der so Datei von Ncurses versuchen

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

Wo der Cross-Compiler nach seinem Zeugs sucht, findest Du über
1
xxx-xxx-gcc -print-search-dirs

raus. Da müssen anschließend auch die include-Files und Libraries 
hininstalliert werden, wenn Du die Pfade dahin nicht (per -I und -L) 
jedesmal extra angeben willst.

Im "Pi-Fall" würde ich mir möglicherweise sogar überlegen, ob ich die 
entsprechenden Pi-Directories nicht sowieso per NFS am Host mounte, 
damit ich das Zeug nicht zweimal pflegen muß.

Was das (Cross-) Compilieren der Libs angeht: die meisten (aber längst 
nicht alle) configure-Scripts verstehen das Argument --target= . Für 
die, die's nicht verstehen, bleibt bloß Doku lesen und am Ende 
möglicherweise rumtricksen.

@Markus F. : wie kann man nur soo heißen 8-)

von Konrad S. (maybee)


Lesenswert?

Markus F. (mfro) schrieb:
> Im "Pi-Fall" würde ich mir möglicherweise sogar überlegen, ob ich die
> entsprechenden Pi-Directories nicht sowieso per NFS am Host mounte,
> damit ich das Zeug nicht zweimal pflegen muß.

Wenn auf den Target eh schon die Header installiert sind (die Librarys 
sind ja sowieso nötig), dann könnte man auch gleich dort kompilieren. 
Aber ich nehme mal an, das Target soll mit möglichst wenig 
Installationspaketen "verseucht" werden.

von Markus F. (mfro)


Lesenswert?

Konrad S. schrieb:
> Markus F. (mfro) schrieb:
>> Im "Pi-Fall" würde ich mir möglicherweise sogar überlegen, ob ich die
>> entsprechenden Pi-Directories nicht sowieso per NFS am Host mounte,
>> damit ich das Zeug nicht zweimal pflegen muß.
>
> Wenn auf den Target eh schon die Header installiert sind (die Librarys
> sind ja sowieso nötig), dann könnte man auch gleich dort kompilieren.

So ein pi bietet zwar erstaunlich viel Computer für's Geld, Entwickeln 
macht darauf aber trotzdem keinen Spaß (zumindest, wenn ein "gescheiter" 
Rechner vorhanden ist). Was man aber machen kann, ist auf dem Host 
compilieren und vom pi aus auf dem NFS-gemounteten 
Entwicklungsverzeichnis das "make install" final ausführen.

> Aber ich nehme mal an, das Target soll mit möglichst wenig
> Installationspaketen "verseucht" werden.

Das Target ist in dem Fall die SD-Karte des pi's. Da ist in zwei Minuten 
ein neues Image drauf, wenn man will.

von Michael K. (Gast)


Lesenswert?

Konrad S. schrieb:

Erst mal vielen Dank an alle, die geantwortet haben.

> Wenn auf den Target eh schon die Header installiert sind (die Librarys
> sind ja sowieso nötig), dann könnte man auch gleich dort kompilieren.

Könnte ich wohl, wenn da nicht das aber wäre ... :)

> Aber ich nehme mal an, das Target soll mit möglichst wenig
> Installationspaketen "verseucht" werden.

Nichtg ganz, der Grund ist eigentlich der, daß ich gerne eine IDE wie 
Codeblocks verwenden möchte, ich auf den Pi im Moment nur Zugang per SSH 
habe. Und warum soll ich die kleine Beere mit einem grafischen System 
und Build-Aufgaben belasten, wenn direkt daneben eine im Vergleich 
richtig dicke Kiste steht?

Und außerdem: so lerne ich vielleicht noch was über das saubere Vorgehen 
für Cross-Builds. Das kann ich sicher irgendwann noch mal brauchen :)

@Markus F.: Die Sache mit NFS ist so simpel, da wäre ich nie drauf 
gekommen :D Das probiere ich mal.

42m

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.