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.
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?
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
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...
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.
> 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
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.
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.
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
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.
> 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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.