Forum: Compiler & IDEs Frage zu Cross-compilierung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Joachim X. (transistorschlumpf)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe hier größte Schwierigkeiten ein vernünftiges System ans Laufen 
zu bekommen um Code unter Qt für den Raspi zu schreiben. Sämtliche 
Toolchains die ich fand sind auf die ein oder andere Art wenig 
kompatibel zu meiner Konfiguration.


Kann man auf nem PC (mittels Cross-Compiler) ein Executable für den 
Raspi schreiben, rüberbeamen und dieses ohne das Qt auf dem Raspi 
installiert ist, dort ausführen? Oder braucht's Qt-Dateien z.B. 
(shared-objects?) ?

Beitrag #5744534 wurde von einem Moderator gelöscht.
Beitrag #5744536 wurde von einem Moderator gelöscht.
von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Joachim X. schrieb:
> Ich habe hier größte Schwierigkeiten ein vernünftiges System ans Laufen
> zu bekommen um Code unter Qt für den Raspi zu schreiben. Sämtliche
> Toolchains die ich fand sind auf die ein oder andere Art wenig
> kompatibel zu meiner Konfiguration.

Dann würde ich als erstes den fragen, der deine Konfiguration kennt. Der 
kann vielleicht Aufschluss geben, warum dazu nichts passt.

> Kann man auf nem PC (mittels Cross-Compiler) ein Executable für den
> Raspi schreiben, rüberbeamen und dieses ohne das Qt auf dem Raspi
> installiert ist, dort ausführen? Oder braucht's Qt-Dateien z.B.
> (shared-objects?) ?

Man kann Qt auch statisch linken, dann werden keine weiteren 
Bibliotheken gebraucht. Dann brauchst du aber für deinen Cross-Compiler 
eine statische Version von Qt. Warum kannst du denn nicht einfach Qt auf 
deinem Raspi installieren?

von Joerg W. (joergwolfram)


Bewertung
0 lesenswert
nicht lesenswert
Anfangs hatte ich es auch mit dem Cross-Compiler versucht, aber man 
braucht dazu auch die ganzen Header-Dateien der verwendeten 
Bibliotheken.
Meiner Meinung nach ist es einfacher, ein PI-Image im Qemu laufen zu 
lassen und dort dann "native" zu compilieren. Die benötigten 
Devel-pakete lassen sich ja dort schnell über apt-get installieren.

Jörg

von Joachim X. (transistorschlumpf)


Bewertung
0 lesenswert
nicht lesenswert
Ich hab Qt Creator + Qt5.3 mit Raspian Jessie auf nem Raspi 3B.
Weiterhin hab ich auf der zweiten Sd-Karte Qt Creator mit 5.7.1 auf 
Stretch. Der grüne dreieckige Startbutton startet das Executable aber 
nicht wirklich, es kommt mir so vor als wäre
1
sudo apt-get install qt5-default
2
sudo apt-get install qtcreator
für Cross-compiling forgesehen.


Rolf M. (rmagnus) schrieb:
>Man kann Qt auch statisch linken, dann werden keine weiteren
>Bibliotheken gebraucht. Dann brauchst du aber für deinen Cross-Compiler
>eine statische Version von Qt.
Für diese Linker-Gedöns Einstellungen hab' ich zu wenig Erfahrung...

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Ich würde auf PC-Seite Docker verwenden um mir eine maßgeschneiderte 
Cross-Build-Umgebung einzurichten. So wäre einerseits auch nach Jahren 
auch auch auf einem neuen PC die Build-Umgebung in Minutenschnelle 100% 
identisch wieder hergestellt und andererseits kontaminierst Du Deinen PC 
nicht mit dutzenden Hilfspaketen und Tools die nur diesem Zweck dienen 
oder gar Paketen mit kniffligen Versionskonflikten, das einzige Paket 
wäre Docker und das ist in 1 Minute installiert und besteht aus purer 
Nützlichkeit.

von Olaf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Kann man auf nem PC (mittels Cross-Compiler) ein Executable für den
> Raspi schreiben, rüberbeamen und dieses ohne das Qt auf dem Raspi
> installiert ist, dort ausführen?

Das sollte grundsaetzlich möglich sein. Zum Beispiel indem du einen 
lokal laufenden gdb uebers Netzwerk nutzt. Also im Prinzip das was auch 
Android macht wenn du dafuer mit Qt entwickelst.

Ist aber eine steile Lernkurve weil du natuerlich auf beiden Systemen 
die Libaries brauchst.

Du kannst natuerlich auch Qt auf einem Rhaspberry komplett laufen lassen 
und den Kiste von extern bedienen und einfach das X11 Fenster auf deinem 
Host aufmachen. Allerdings laeuft Qt dann im Gaehn-Modus.

Ich wuerde vielleicht damit anfangen auf beiden Systemen dieselbe 
Qt-Version zu installieren und dann wirklich ueber den Host entwickeln. 
So solltest du die Libarieproblematik weitestgehend umgehen koennen.

Olaf

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Ein weiterer interessanter Ansatz wäre ein komplettes SD-Karten-Image 
für den Raspi mit Yocto zu bauen, eine maßgeschneiderte Distribution 
komplett automatisch aus den Quellen gebaut die nur die gewünschte 
Anwendung und ihre Abhängigkeiten enthält.

Dieses Buildsystem zu durchschauen und zu beherrschen ist aber auch eine 
harte Nuß, jedoch wenn Du Dich da nach nem halben Jahr halbwegs 
durchgefuchst hast ist das eine nicht zu verachtende Superwaffe im 
Arsenal die Dir bei zukünftigen Embedded Linux Projekten neue Ansätze 
eröffnet.

von BobbyX (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du kannst das Projekt direkt auf dem Raspberry compilieren. Zuvor musst 
du natürlich alle Tools installieren, das ist aber kein Problem, 
funktioniert ja genauso wie mit Linux auf einem PC. Das Compilieren 
dauert natürlich etwas länger als auf einem PC, aber damit kann man 
leben.

Wenn man ein Qt Projekt für MacOS bauen will dann verwendet man ja auch 
keinen Cross Compiler unter Linux/Windows, sondert man kopiert das 
Projekt auf einen Mac Rechner und baut dort.

von Sven B. (scummos)


Bewertung
0 lesenswert
nicht lesenswert
Olaf schrieb:
>> Kann man auf nem PC (mittels Cross-Compiler) ein Executable für den
>> Raspi schreiben, rüberbeamen und dieses ohne das Qt auf dem Raspi
>> installiert ist, dort ausführen?
>
> Das sollte grundsaetzlich möglich sein. Zum Beispiel indem du einen
> lokal laufenden gdb uebers Netzwerk nutzt. Also im Prinzip das was auch
> Android macht wenn du dafuer mit Qt entwickelst.

Natürlich braucht er auf dem Target die Shared Libraries. Welchen Code 
soll das Target sonst ausführen? Außer du machst irgendein komisches 
Remote-X11-Zeug, was aber nicht wirklich zielführend ist.

> Ich wuerde vielleicht damit anfangen auf beiden Systemen dieselbe
> Qt-Version zu installieren und dann wirklich ueber den Host entwickeln.
> So solltest du die Libarieproblematik weitestgehend umgehen koennen.

Das bringt dir nichts, das Pi ist doch ein arm, und dein Host ist 
x86-64. Du brauchst hier schon eine echte Cross-Toolchain, mit 
arm-target Crosscompiler und den arm Qt-Headern und Libs auf dem Host. 
Du musst auch auf dem Host mit dem Crosscompiler gegen die arm-libs 
linken und so. Einfach kopieren und irgendwie auf beiden Geräten 
ausführen ist nicht.

Im Detail ist das relativ knifflig, weil das ja auch alles gegen die 
glibc des Target-Systems gelinkt werden muss, und die hängt wieder von 
der Kernel-Konfiguration ab ... also wenn du Glück hast, findest du 
irgendwas, was für genau dein Target-System oder etwas hinreichend 
ähnliches ist fertig, aber i.A. muss man sich die Toolchain selbst 
kompilieren.

: Bearbeitet durch User
von Kaj (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sven B. schrieb:
> Das bringt dir nichts, das Pi ist doch ein arm, und dein Host ist
> x86-64. Du brauchst hier schon eine echte Cross-Toolchain, mit
> arm-target Crosscompiler und den arm Qt-Headern und Libs auf dem Host.
> Du musst auch auf dem Host mit dem Crosscompiler gegen die arm-libs
> linken und so. Einfach kopieren und irgendwie auf beiden Geräten
> ausführen ist nicht.
Was Olaf wohl meinte, war:
Auf PC und Raspi die gleiche Qt installieren, auf PC entwickeln, testen, 
Projekt-Code auf den Raspi kopieren, und da dann eben fuer den Raspi 
compilieren. Das kopieren des Codes ist auch nicht fehleranfaellig, wenn 
man es ueber z.B. git/svn/etc. macht.
Auf PC einchecken wenn es funktioniert, und auf dem Raspi einfach wieder 
auschecken und compilieren. Fertig.

Ist einfacher als sich mit einer Cross-Toolchain rumschlagen.

von Olaf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Auf PC und Raspi die gleiche Qt installieren, auf PC entwickeln, testen,
> Projekt-Code auf den Raspi kopieren, und da dann eben fuer den Raspi

Das muss aber natuerlich auch das Projekt zulassen. Gerade bei 
Anwendungen auf dem Raspbery hat man ja haeufig eher hardwarenahe Sachen 
und dann wird man wohl auf dem Zielsystem entwickeln muessen.
Ich hab das vor kurzem mal ausprobiert, komplettes Qt auf einem 3B und 
fand das schon sehr traege.

Olaf

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Kaj schrieb:
> Ist einfacher als sich mit einer Cross-Toolchain rumschlagen.

Oder einfach ein passendes Docker-Image für die Cross-Toolchain nehmen, 
ich gehe jede Wette ein daß es schon fix und fertige Images oder 
Dockerfiles gibt für den Zweck, dann muss man sich mit gar nichts mehr 
herumschlagen, und man muß auch nicht irgendwelche passenden libs in der 
richtigen Version oder sonstiges Zeugs zusammensuchen und auf dem 
Entwicklungs-PC installieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.