Lösen Sie das Problem der Verwendung von linuxdeployqt zum Verpacken von Qt-Programmen in Ubuntu

Lösen Sie das Problem der Verwendung von linuxdeployqt zum Verpacken von Qt-Programmen in Ubuntu

Ich habe einige Qt-Schnittstellenprogramme geschrieben, fand es aber schwierig, sie auf andere Computer zu portieren, auf denen die Qt-Umgebung nicht installiert ist. Nachdem ich die Informationen überprüft hatte, erfuhr ich, dass es unter Windows ein Programm „windowsdeployqt“ und unter Linux ein „linuxdeployqt“ gibt, mit denen wir schnell paketieren können.

1. Konfigurieren Sie die Qt-Umgebung

Zuerst konfigurieren wir die Qt-Umgebung und fügen die folgende Zeile zu ~/.bashrc hinzu:

export PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/lib:$LD_LIBRARY_PATH
exportiere QT_PLUGIN_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/qml:$QML2_IMPORT_PATH

Das Verzeichnis home/xl/Qt5.9.2/5.9.2/ sollte entsprechend dem auf Ihrem Computer installierten Qt-Pfad geändert werden.

Führen Sie dann sourec ~/.bashrc aus, damit die Konfiguration wirksam wird.

2. Kompilieren Sie linuxdeployqt

Projektadresse: https://github.com/probonopd/linuxdeployqt.git.

Obwohl das kompilierte Paket veröffentlicht wurde, verwende ich Ubuntu 18 und die Systemversion ist zu hoch. Deshalb entscheide ich mich trotzdem für die Kompilierung des Codes.

Um das Problem zu umgehen, dass das kompilierte Paket eine zu hohe Systemversion erkennt und die Ausführung nicht fortsetzt, kommentieren wir vor dem Kompilieren folgenden Code in tools/linuxdeployqt/main.cpp aus:

// openSUSE Leap 15.0 verwendet glibc 2.26 und wird auf OBS verwendet
    /*if (strverscmp (glcv, "2.27") >= 0) { //Kommentarversionsprüfung qInfo() << "FEHLER: Das Hostsystem ist zu neu.";
      qInfo() << "Bitte auf einem System mit einer glibc-Version ausführen, die nicht neuer ist als die älteste";
      qInfo() << "derzeit noch unterstützte Mainstream-Distribution (xenial), nämlich glibc 2.23.";
      qInfo() << "Dadurch wird sichergestellt, dass das resultierende Paket auf den meisten noch unterstützten Linux-Distributionen funktioniert.";
      qInfo() << "Weitere Informationen finden Sie unter";
      qInfo() << "https://github.com/probonopd/linuxdeployqt/issues/340";
      Rückgabe 1;
    }*/

Anschließend können Sie cmake und make zum Kompilieren verwenden. Das generierte ausführbare Programm ist tools/linuxdeployqt/linuxdeployqt .

Abschließend können Sie das generierte ausführbare Programm zur einfacheren Verwendung in das Verzeichnis /usr/local/bin/ des Systems kopieren.

3. Verpackung

Kopieren Sie das Qt-kompilierte Programm in einen separaten Ordner.

Führen Sie dann linuxdeployqt appname.

Im Allgemeinen wird es reibungslos abgeschlossen. Im aktuellen Verzeichnis wird ein Apprun vorhanden sein. Führen Sie es einfach direkt aus.

Manchmal klappt es allerdings nicht so reibungslos, wahrscheinlich weil die entsprechende Bibliothek im System fehlt. Der Fehler, auf den ich gestoßen bin, war beispielsweise:

FEHLER: Patchelf konnte nicht gestartet werden.
FEHLER: Stellen Sie sicher, dass es auf Ihrem $PATH installiert ist.
FEHLER: Fehler beim Lesen von rpath mit Patchelf „libQt5Widgets.so“: „“
FEHLER: Fehler beim Lesen von rpath mit Patchelf „libQt5Widgets.so“: „“

Dieser Fehler weist darauf hin, dass das erforderliche Pathcheff-Tool fehlt und kann durch die direkte Installation behoben werden:

sudo apt install patchelf

Dann ist folgender Fehler aufgetreten:

FEHLER: ldd Ausgabezeile: „libjasper.so.1 => nicht gefunden“
FEHLER: für Binärdatei: „/home/xl/Qt5.9.2/5.9.2/gcc_64/plugins/imageformats/libqjp2.so“
FEHLER: Bitte stellen Sie sicher, dass alle Bibliotheken von ldd gefunden werden können. Abbruch.

Dies zeigt, dass die Bibliothek libqjp2.so in unserem System fehlt. Es ist eigentlich sehr seltsam. Die lokale Version kann offensichtlich ausgeführt werden. Warum fehlt also diese Bibliotheksdatei? Die Lösung ist jedoch ganz einfach: Installieren Sie einfach das, was fehlt:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt installiere libjasper1 libjasper-dev

Nach Abschluss der Installation wird es reibungslos verpackt.

Zusammenfassen

Oben habe ich Ihnen erklärt, wie Sie mit linuxdeployqt Qt-Programme in Ubuntu verpacken können. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • So konfigurieren Sie die Qt-Entwicklungsumgebung der Sprache Go unter Ubuntu Linux
  • So führen Sie Linux-Befehlsprogramme remote und stapelweise mit pyqt aus
  • Eine einfache Möglichkeit, die QT-Anwendung in eingebettetem Linux neu zu starten (basierend auf QT4.8 qws)
  • So verwenden Sie Qt, um unter Ubuntu Linux eine Verbindung zu einer MySQL-Datenbank herzustellen
  • So installieren Sie Subversion 1.9.5 in einer Linux-Umgebung (CentOS 6.7 64-Bit)
  • Lösung für das Problem „Linux QT Kit fehlt“ und „Version leer“

<<:  Zusammenfassung häufig verwendeter Zeit-, Datums- und Konvertierungsfunktionen in MySQL

>>:  Zwei Implementierungen des Front-End-Routings von Vue-Router

Artikel empfehlen

Tiefgreifendes Verständnis der Datenreaktionsfähigkeit von Vue

Inhaltsverzeichnis 1. ES-Syntax-Getter und -Sette...

So ändern Sie die Container-Portzuordnung in Docker dynamisch

Vorwort: Die Docker-Portzuordnung erfolgt häufig,...

Dockers flexible Implementierung zum Aufbau einer PHP-Umgebung

Verwenden Sie Docker, um eine flexible Online-PHP...

Lösung für Linux CentOS 6.5 ifconfig kann IP nicht abfragen

Kürzlich sagten einige Freunde, dass sie nach der...

Miniprogramm zur Implementierung des Paging-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

So starten Sie mehrere MySQL-Instanzen in CentOS 7.0 (mysql-5.7.21)

Konfigurationsanweisungen Linux-System: CentOS-7....

Zusammenfassung der praktischen Methoden von CSS3 (empfohlen)

1. Abgerundeter Rand: CSS- CodeInhalt in die Zwis...

CSS3-Zeitleistenanimation

Ergebnisse erzielen html <h2>CSS3-Zeitleist...

setup+ref+reactive implementiert Vue3-Reaktionsfähigkeit

Das Setup wird zum Schreiben kombinierter APIs ve...

10 wichtige Unterschiede zwischen HTML5 und HTML4

HTML5 ist die nächste Version des HTML-Standards....

CentOS 7: Erläuterung zum Wechseln des Boot-Kernels und des Boot-Modus

Centos7-Switch-Boot-Kernel Hinweis: Bei Bedarf wi...

Das WeChat-Applet implementiert einen Videoplayer, der einen Bullet-Screen sendet

In diesem Artikel wird der spezifische Code für d...