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
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
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
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-)
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.
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.
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