Was ist die Qt-Umgebung?
Qt ist ein plattformübergreifendes C++-Entwicklungsframework für grafische Benutzeroberflächenanwendungen, mit dem Sie leistungsstarke Desktop-, Mobil- und Webanwendungen erstellen können. Es kann auch zur Entwicklung von Nicht-GUI-Programmen wie Konsolentools und Servern verwendet werden. Qt ist ein objektorientiertes Framework, das spezielle Codegenerierungs-Erweiterungen und einige Makros nutzt. Qt ist einfach zu erweitern und ermöglicht echten Komponenten-Programmierstil.

Ubuntu 18/20 Deployment
Firefly bietet ein entsprechendes Qt-Umgebungspaket für das auf Firefly-Produkten laufende Ubuntu 18/20-System an, das eine schnelle Bereitstellung und Entwicklung ermöglicht. Die Umgebungen der beiden Systeme sind nicht austauschbar. Bitte wählen Sie die entsprechende Umgebung gemäß der auf Ihrem Firefly-Gerät laufenden Systemversion aus.
Wenn Sie ein Umgebungspaket benötigen, wenden Sie sich bitte an uns, um es anzufordern.
Das Umgebungspaket nutzt einen Cross-Compilation-Modus, um ausführbaren Code auf einer Plattform für eine andere Plattform zu generieren. Wir müssen auf einem Linux-Computer mit x86_64-Architektur entwickeln und kompilieren und die kompilierte ausführbare Datei auf das Zielgerät mit Arm64-Architektur zum Ausführen legen. Daher muss das Umgebungspaket sowohl auf dem Host als auch auf dem Gerät bereitgestellt werden.
Hinweis: Es gibt geringfügige Unterschiede zwischen verschiedenen Versionen der Umgebungspakete. Die folgenden Abschnitte zur Bereitstellung und Umgebungseinrichtung können nur einer zur Erklärung verwendet werden. Bitte beziehen Sie sich auf die im Umgebungspaket enthaltene Dokumentation für die spezifische Verwendung.
Hostseitige Bereitstellung
Bezüglich der Wahl des Hosts: Bitte verwenden Sie einen Host mit demselben System wie das Zielgerät zur Entwicklung.
Beispielsweise, wenn Sie ein Qt-Programm für ein Firefly-Gerät mit Ubuntu 20 entwickeln müssen, sollte der Host ebenfalls ein Computer mit Ubuntu 20 sein.
1. Start der Bereitstellung
Entpacken Sie das Umgebungspaket auf Ihrem Computer und wechseln Sie in das entpackte Verzeichnis, um die Bereitstellung zu starten. Dies gliedert sich hauptsächlich in 3 Schritte:
# Kopieren Sie die Datei in das Systemverzeichnis /opt/
cp -rfd firefly_qt5.15_arm64_20.04 /opt/
# Kopieren Sie sysroot in das Verzeichnis /opt/
cp -rfd sysroot /opt/
# Kopieren Sie die Umgebungsvariablen-Datei in /etc/profile.d/
cp host/host_qtEnv.sh /etc/profile.d
2. Umgebungseinrichtung
Installieren Sie den Cross-Compiler.
sudo apt update
sudo apt install -y crossbuild-essential-arm64
Melden Sie sich dann erneut an oder starten Sie den Computer neu, um sicherzustellen, dass die zuvor kopierten Umgebungsvariablen wirksam werden.
3. Überprüfung
Das Komprimierungspaket enthält auch einen Beispielordner mit mehreren einfachen Qt-Demos, die verwendet werden können, um zu überprüfen, ob die Umgebung erfolgreich eingerichtet wurde. Wenn alles gut geht, bedeutet dies, dass die Umgebung erfolgreich bereitgestellt wurde.
# Beispielsweise verwenden Sie analogclock zur Überprüfung
cd example/analogclock
# Führen Sie qmake aus, um das Kompilierungssystem automatisch zu generieren
qmake
# Führen Sie make aus, um die Kompilierung zu starten
make
Gerätebereitstellung
1. Start der Bereitstellung
Entpacken Sie das Umgebungspaket auf Ihrem Computer und wechseln Sie in das entpackte Verzeichnis, um die Bereitstellung zu starten. Dies gliedert sich hauptsächlich in 2 Schritte:
# Kopieren Sie den ext-Teil in das Systemverzeichnis /opt/. Beachten Sie, dass ext in firefly_qt5.15 umbenannt wird
cp -rfd firefly_qt5.15_arm64_20.04/ext /opt/firefly_qt5.15
# Kopieren Sie die Umgebungsvariablen-Datei in /etc/profile.d/
cp target/target_qtEnv.sh /etc/profile.d/
2. Umgebungseinrichtung
Sie müssen auch einige notwendige Bibliotheken auf dem Gerät installieren:
apt install -y libmtdev1 libinput10 libxkbcommon0 </code>
libdouble-conversion3 libicu66 libharfbuzz0b </code>
libwebpdemux2 libwebpmux3
Öffnen Sie "/etc/profile.d/target_qtEnv.sh", und Sie werden drei auskommentierte Umgebungsvariablen sehen:
#XCB
#export QT_QPA_PLATFORM=XCB
#export QT_QPA_EGLFS_INTEGRATION=XCB_EGL
#LinuxFB
#export QT_QPA_PLATFORM=LINUXFB
#export QT_QPA_FB_DRM=1
#EGLFS
#export QT_QPA_PLATFORM=EGLFS
#export QT_QPA_EGLFS_INTEGRATION=EGLFS_KMS #in minimal ubuntu, use eglfs_kms.
A_EGLFS_KMS_ATOMIC=1 #use drm atomic api or legacy api(two different)
#export QT_QPA_EGLFS_HIDECURSOR=1 #hide cursor
Entfernen Sie die Kommentare des entsprechenden Teils gemäß der von Ihnen gewünschten QPA_PLATFORM. Beispielsweise wird XCB in der Ubuntu-Umgebung üblicherweise verwendet. Entfernen Sie die Kommentare dieses Teils, speichern Sie die Datei und verlassen Sie den Editor.
#XCB
export QT_QPA_PLATFORM=XCB
export QT_QPA_EGLFS_INTEGRATION=XCB_EGL
Wenn Sie XCB verwenden, müssen Sie einige zusätzliche Bibliotheken installieren:
apt install -y libxcb-icccm4 libxcb-image0 libxcb-shm0 </code>
libxcb-keysyms1 libxcb-render0 libxcb-render-util0 </code>
libxcb-shape0 libxcb-sync1 libxcb-xfixes0 </code>
libxcb-xinerama0 libxcb-xkb1 libxcb-randr0 </code>
libsm6 libice6 libxkbcommon-x11-0
Führen Sie schließlich "reboot" aus, um das Gerät neu zu starten.
3. Überprüfung
Übertragen Sie die auf der Hostseite kompilierte ausführbare Datei auf das Gerät und führen Sie sie aus. Wenn sie normal läuft, bedeutet dies, dass die Geräteumgebung erfolgreich eingerichtet wurde.
LD_LIBRARY_PATH=/opt/firefly_qt5.15/lib ./analogclock
Ubuntu 22 Deployment
Wenn das Ziel-Firefly-Gerät Ubuntu 22 ausführt, ist keine Cross-Compilation-Entwicklung erforderlich, und die Installation von Qt ist viel einfacher und bequemer.
Firefly hat die Qt-Umgebung für Ubuntu 22 in ein deb-Paket verpackt, das auf dem Zielgerät mit apt installiert werden kann:
# Installieren Sie die Basisumgebung
apt update
apt install -y qtcreator qtbase5-dev
# Installieren Sie zusätzliche Qt-Komponenten und Entwicklungsumgebungen gemäß den Entwicklungsanforderungen, wie z.B.
apt install -y libqt5multimedia5 qtmultimedia5-dev libqt5quick5 qtdeclarative5-dev
Qt Creator-Konfiguration
Bei der Qt-Entwicklung wird häufig Qt Creator als IDE verwendet. Im vorherigen Teil haben wir die Qt-Entwicklungsumgebung eingerichtet. Im Folgenden wird erläutert, wie Sie sicherstellen können, dass Qt Creator die von Ihnen eingerichtete Umgebung verwendet und nicht die mit der IDE mitgelieferte oder eine andere Umgebung.
Ubuntu 18/20
Auf der Hostseite können Sie Qt Creator mit dem folgenden Befehl schnell installieren:
sudo apt update
sudo apt install qtcreator
Nach dem Start von Qt Creator klicken Sie zunächst auf "Werkzeuge" -> "Optionen", um die Einstellungsoberfläche zu öffnen:

Wählen Sie dann "Qt-Versionen" und klicken Sie auf "Hinzufügen", um die Qt-Version hinzuzufügen:

Wählen Sie im geöffneten Fenster die zuvor in das Verzeichnis /opt kopierte Qt-Umgebung aus:
Hinweis: Der Pfad hier kann je nach Version des Umgebungspakets variieren, aber am Ende müssen Sie den Speicherort von qmake unter /opt auswählen.
Sie können der neu hinzugefügten Qt-Version einen Namen geben und dann auf "Anwenden" klicken, um die Hinzufügung zu bestätigen:
Wählen Sie dann die Seite "Kits" und fügen Sie ein neues Kit hinzu:
Konfigurieren Sie das neue Kit wie folgt:

Bedeutung der Konfiguration: Benennen Sie zunächst das Kit, um es leicht identifizieren zu können. Wählen Sie als "Gerätetyp" "Allgemeines Linux-Gerät". Der Schwerpunkt liegt auf den folgenden drei Konfigurationen. Wählen Sie für "Sysroot" das zuvor in das Verzeichnis /opt kopierte sysroot aus. Wählen Sie für den Compiler den 64-Bit-GCC für ARM aus. Wählen Sie für die Qt-Version die in einem vorherigen Schritt hinzugefügte Qt-Version aus und klicken Sie dann auf "Anwenden", um die Änderungen zu übernehmen.
Schließlich können Sie ein Projekt öffnen und unser neu hinzugefügtes Kit auswählen, um zu kompilieren. Wenn die Kompilierung erfolgreich ist, bedeutet dies, dass unsere Konfiguration korrekt ist:

Ubuntu 22
Das Zielgerät verwendet das Ubuntu 22-System, und es ist keine Cross-Compilation erforderlich. Daher wird Qt Creator direkt auf dem Gerät installiert.
Da die Qt-Umgebung über apt installiert wird, sollte Qt Creator beim Öffnen automatisch den Speicherort von qmake erkennen:

Der von Qt Creator automatisch erkannte Pfad für qmake lautet "/usr/lib/qt5/bin/qmake". Daher müssen Sie keine Qt-Version manuell hinzufügen.
Bei der Kit-Konfiguration wird kein Sysroot festgelegt, da keine Cross-Compilation erforderlich ist. Wählen Sie für die Qt-Version die automatisch erkannte Qt-Version aus. Der Rest der Konfigurationen kann gleich wie im vorherigen Kapitel bleiben.
Häufig gestellte Fragen
1. Entpacken fehlgeschlagen
Falls Sie beim Entpacken des Umgebungspakets diesen Fehler erhalten:
tar: xxxxx: Directory renamed before its status could be extracted
tar: Exiting with failure status due to previous errors
Sie können dem tar-Befehl den Parameter -P hinzufügen und erneut versuchen, es zu entpacken, z.B.:
tar -Pzxf firefly_arm64_qt5.15_20.04_20230415.tgz
2. Konflikt zwischen mehreren Qt-Versionen
Falls beim Ausführen eines Qt-Programms die Qt-Bibliothek nicht gefunden werden kann:
./analogclock: symbol lookup error: ./analogclock: undefined symbol: _ZN9QGradientD1Ev, version Qt_5
Dies bedeutet, dass das Qt-Programm eine Qt-Bibliothek gefunden hat, die nicht mit seiner Version übereinstimmt. Dieses Problem tritt häufig in Systemen mit mehreren Qt-Versionen auf. Beispielsweise benötigen wir eigentlich eine Umgebung unter "/opt/firefly_qt5.15", aber das Qt-Programm versucht, "/lib/aarch64-linux-gnu/libQt5Gui.so.5" zu verwenden, was Probleme verursacht.
Verwenden Sie den Befehl "ldd", um die Bibliotheken zu sehen, die ein Programm verwenden möchte:
root@firefly:~/analogclock# ldd analogclock | grep -i qt
libQt5Gui.so.5 => /opt/firefly_qt5.15/lib/libQt5Gui.so.5 (0x0000007f8e0b2000)
libQt5Core.so.5 => /opt/firefly_qt5.15/lib/libQt5Core.so.5 (0x0000007f8daf6000)
Lösung 1: Geben Sie den Pfad an, in dem das Programm zunächst nach der Bibliothek suchen soll, bevor Sie kompilieren. Fügen Sie der pro-Datei des Projekts Folgendes hinzu:
QMAKE_RPATHDIR += /opt/firefly_qt5.15/lib
Lösung 2: Geben Sie "LD_LIBRARY_PATH" beim Ausführen des Programms an:
LD_LIBRARY_PATH=/opt/firefly_qt5.15/lib ./analogclock
3. Anzeige nicht gefunden
Wenn Sie beim Ausführen eines Qt-Programms keine Verbindung zur Anzeige herstellen können:
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
Diese Anwendung konnte nicht gestartet werden, da kein Qt-Plattform-Plugin initialisiert werden konnte. Ein Neinstallieren der Anwendung könnte dieses Problem beheben.
Verfügbare Plattform-Plugins sind: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, webgl, xcb.
Abgebrochen
Es handelt sich höchstwahrscheinlich um ein Problem mit den Umgebungsvariablen, die angegeben werden müssen. Üblicherweise:
# Verwendung in einer X11-Umgebung:
export DISPLAY=:0
# Verwendung in einer Wayland-Umgebung:
export WAYLAND_DISPLAY=wayland-0
4. Qt-Bibliothek nicht gefunden
Wenn die Qt-Bibliothek beim Ausführen eines Qt-Programms nicht gefunden werden kann:
./analogclock: error while loading shared libraries: libQt5Gui.so.5: cannot open shared object file: No such file or directory
Bitte überprüfen Sie, ob die Umgebungsvariablen-Datei "/etc/profile.d/target_qtEnv.sh" existiert. Wenn sie existiert, ist sie wirksam? Ist der Pfad zur Qt-Bibliothek wie im Dokument gefordert an der angegebenen Stelle platziert?