Wie mache ich libQtCore v5.10.1 meiner Distribution verfügbar, wenn die gelieferte Version 5.6 der Anwendung verwendet wird?

604
Rob Waa

1) Wenn ich von der Befehlszeile aus Verstehe starte, sehe ich Folgendes. Alles ist ok. :

[me@box1 ~]# understand 

2) Unter der Überschrift "Erste Schritte" auf der Registerkarte "Erste Schritte":

Wenn ich auf einen der Links klicke, "Hilfe verstehen ...", "Häufigste Fragen ...", "Perl-API-Hilfe ...", "Python-API-Hilfe ..." und "SciTools-Unterstützung". . "und außerdem auf die gleichen Links im" Hilfe "-Menü, dann werden die folgenden Fehler zum Terminalfenster hinzugefügt und nichts passiert:

[me@box1 4.4.19 vpn-client]# understand kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by kde-open5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5KIOWidgets.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5KIOCore.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5I18n.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5CoreAddons.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5JobWidgets.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Service.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Completion.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5IconThemes.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5WindowSystem.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ConfigWidgets.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5WidgetsAddons.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ConfigGui.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ConfigCore.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libQt5DBus.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5DBusAddons.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Auth.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libQt5X11Extras.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libQt5Svg.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Archive.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ItemViews.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Codecs.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5GuiAddons.so.5) 

3) qmakeinformiert mich, dass Qt v5.10.1 von meiner Distribution (Arch Linux) installiert wird:

[me@box1 ~]# qmake -version QMake version 3.1 Using Qt version 5.10.1 in /usr/lib 

4) readelfinformiert mich (und bestätigt qmakedie Ausgabe), dass meine Distribution Qt Core v5.10.1 installiert hat:

[me@box1 ~]# readelf -V /usr/lib/libQt5Core.so.5.10.1 | grep -ie 'Qt_5\.' d7c: 9h(Qt_5.5) bh(Qt_5.7) e (Qt_5.10) 3 (Qt_5)  d80: 5h(Qt_5.1) ch(Qt_5.8) 7h(Qt_5.3) 8h(Qt_5.4)  d84: ah(Qt_5.6) dh(Qt_5.9) 4h(Qt_5.0) 6h(Qt_5.2)  149c: 3 (Qt_5) e (Qt_5.10) 3 (Qt_5) 2 (Qt_5_PRIVATE_API)  14c0: 3 (Qt_5) 4 (Qt_5.0) 3 (Qt_5) 3 (Qt_5)  14c4: 3 (Qt_5) 3 (Qt_5) 5 (Qt_5.1) 3 (Qt_5)  14c8: 6 (Qt_5.2) 2 (Qt_5_PRIVATE_API) 7 (Qt_5.3) 3 (Qt_5)  14cc: 8 (Qt_5.4) 3 (Qt_5) 3 (Qt_5) 3 (Qt_5)  14d0: 3 (Qt_5) 3 (Qt_5) 9 (Qt_5.5) 3 (Qt_5)  14d4: 3 (Qt_5) a (Qt_5.6) 3 (Qt_5) 3 (Qt_5)  14d8: 3 (Qt_5) 2 (Qt_5_PRIVATE_API) b (Qt_5.7) 3 (Qt_5)  14dc: 2 (Qt_5_PRIVATE_API) 3 (Qt_5) c (Qt_5.8) 3 (Qt_5)  14e0: 3 (Qt_5) d (Qt_5.9) 3 (Qt_5) 2 (Qt_5_PRIVATE_API)  0x0054: Rev: 1 Flags: none Index: 4 Cnt: 2 Name: Qt_5.0 0x0078: Rev: 1 Flags: none Index: 5 Cnt: 2 Name: Qt_5.1 0x0094: Parent 1: Qt_5.0 0x009c: Rev: 1 Flags: none Index: 6 Cnt: 2 Name: Qt_5.2 0x00b8: Parent 1: Qt_5.1 0x00c0: Rev: 1 Flags: none Index: 7 Cnt: 2 Name: Qt_5.3 0x00dc: Parent 1: Qt_5.2 0x00e4: Rev: 1 Flags: none Index: 8 Cnt: 2 Name: Qt_5.4 0x0100: Parent 1: Qt_5.3 0x0108: Rev: 1 Flags: none Index: 9 Cnt: 2 Name: Qt_5.5 0x0124: Parent 1: Qt_5.4 0x012c: Rev: 1 Flags: none Index: 10 Cnt: 2 Name: Qt_5.6 0x0148: Parent 1: Qt_5.5 0x0150: Rev: 1 Flags: none Index: 11 Cnt: 2 Name: Qt_5.7 0x016c: Parent 1: Qt_5.6 0x0174: Rev: 1 Flags: none Index: 12 Cnt: 2 Name: Qt_5.8 0x0190: Parent 1: Qt_5.7 0x0198: Rev: 1 Flags: none Index: 13 Cnt: 2 Name: Qt_5.9 0x01b4: Parent 1: Qt_5.8 0x01bc: Rev: 1 Flags: none Index: 14 Cnt: 2 Name: Qt_5.10 0x01d8: Parent 1: Qt_5.9 

5) readelfinformiert mich darüber, dass Understand mit Qt v5.6 ausgeliefert wird:

[me@box1 ~]# readelf -V /home/me/bin/scitools/bin/linux64/libQt5Core.so.5 | grep -ie 'Qt_5\.' 9e8: 3 (Qt_5) 3 (Qt_5) 4 (Qt_5.0) 2 (Qt_5_PRIVATE_API)  9ec: 3 (Qt_5) 3 (Qt_5) 5 (Qt_5.1) 3 (Qt_5)  9f0: 6 (Qt_5.2) 3 (Qt_5) 2 (Qt_5_PRIVATE_API) 3 (Qt_5)  9f4: 2 (Qt_5_PRIVATE_API) 7 (Qt_5.3) 3 (Qt_5) 8 (Qt_5.4)  9f8: 3 (Qt_5) 3 (Qt_5) 9 (Qt_5.5) 3 (Qt_5)  9fc: 3 (Qt_5) 3 (Qt_5) a (Qt_5.6) 2 (Qt_5_PRIVATE_API)  d90: 3 (Qt_5) 5h(Qt_5.1) 4h(Qt_5.0) a (Qt_5.6)  d94: 8h(Qt_5.4) 9h(Qt_5.5) 6h(Qt_5.2) 7h(Qt_5.3)  0x0054: Rev: 1 Flags: none Index: 4 Cnt: 2 Name: Qt_5.0 0x0078: Rev: 1 Flags: none Index: 5 Cnt: 2 Name: Qt_5.1 0x0094: Parent 1: Qt_5.0 0x009c: Rev: 1 Flags: none Index: 6 Cnt: 2 Name: Qt_5.2 0x00b8: Parent 1: Qt_5.1 0x00c0: Rev: 1 Flags: none Index: 7 Cnt: 2 Name: Qt_5.3 0x00dc: Parent 1: Qt_5.2 0x00e4: Rev: 1 Flags: none Index: 8 Cnt: 2 Name: Qt_5.4 0x0100: Parent 1: Qt_5.3 0x0108: Rev: 1 Flags: none Index: 9 Cnt: 2 Name: Qt_5.5 0x0124: Parent 1: Qt_5.4 0x012c: Rev: 1 Flags: none Index: 10 Cnt: 2 Name: Qt_5.6 0x0148: Parent 1: Qt_5.5 

6) lddinformiert mich darüber, dass Understand die gelieferte Version von Qt verwenden wird:

[me@box1 ~]# ldd /home/me/bin/scitools/bin/linux64/understand.bin | grep -ie 'scitools' libQt5Concurrent.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Concurrent.so.5 (0x00007f0a63b77000) libQt5Sql.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Sql.so.5 (0x00007f0a63af9000) libQt5Network.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Network.so.5 (0x00007f0a624dd000) libQt5Xml.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Xml.so.5 (0x00007f0a63abd000) libQt5PrintSupport.so.5 => /home/me/bin/scitools/bin/linux64/libQt5PrintSupport.so.5 (0x00007f0a63a4d000) libastyle.so => /home/me/bin/scitools/bin/linux64/libastyle.so (0x00007f0a6229a000) libQt5Widgets.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Widgets.so.5 (0x00007f0a61c12000) libQt5Gui.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Gui.so.5 (0x00007f0a61732000) libQt5Core.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Core.so.5 (0x00007f0a6117a000) 

7) Das Bash-Skript understand, das gestartet wird, understand.binenthält Folgendes:

#!/bin/bash scriptdir=`dirname $0` export LD_LIBRARY_PATH=$scriptdir unset QT_PLUGIN_PATH $0.bin "$@" 

8) Wenn Sie das understandSkript kopieren und die Zeile hinzufügen, wurde echo "\$LD_LIBRARY_PATH after === $LD_LIBRARY_PATH"Folgendes festgelegt:

$LD_LIBRARY_PATH after === /home/me/bin/scitools/bin/linux64 

9) Offensichtlich suchen die Bibliotheken, die den Fehler werfen, eine Qt v5.10 Core-Bibliothek. Sie finden jedoch die Qt v5.6 Core-Bibliothek, die mit Understand ausgeliefert wurde.

Also fügte ich einen Symlink zu dem Verständnisverzeichnis hinzu mit:

[me@box1 ~]# ln -sf /usr/lib/libQt5Core.so.5.10.1 /home/me/bin/scitools/bin/linux64/libQt5Core.so.5.10 

Das hat sich aber nicht geändert.

Ich fuhr dann fort, die Kopie des "Verstehen" -Bash-Skripts ( understand-test) zu ändern, und änderte die Zeile export LD_LIBRARY_PATH=$scriptdirin export LD_LIBRARY_PATH=$scriptdir:/usr/lib. Das hat sich aber auch nicht geändert.

Während /home/me/bin/scitools/bin/linux64/libQt5Core.so.5 (v5.6) in Gebrauch ist, was kann ich tun Bibliotheken machen wie /usr/lib/libKF5KIOWidgets.so.5, /usr/lib/libKF5KIOCore.so.5usw. finden und v5.10.1 verwenden /usr/lib/libQt5Core.so.5.10.1 ?

0
Warum nicht einfach die 5.6-Libs entfernen? Ignacio Vazquez-Abrams vor 5 Jahren 0
@ IgnacioVazquez-Abrams Weil es nicht meine Kopie von Understand ist. Das Unternehmen, mit dem ich derzeit einen Vertrag abwickle, ermöglicht mir die Fernwartung und Installation auf meinem eigenen Desktop für die Dauer des Vertrags. Ich darf keine Änderungen vornehmen. Das Bash-Skript zu kopieren und eine Änderung daran vorzunehmen, ist schon ein bisschen grauer Bereich, denke ich. Rob Waa vor 5 Jahren 0
Die Enter-Taste postiert hier scheinbar. Ihr Kommentar hat mich dazu angehalten, das kopierte Bash-Skript noch einmal zu ändern. Ich habe die Zeile `export LD_LIBRARY_PATH = $ scriptdir` in` export LD_LIBRARY_PATH = / usr / lib` geändert. Und das hat den Trick gemacht. Verstehen läuft jetzt auf QT 5.10.1 und alle Links öffnen und funktionieren. Ich warte jetzt auf die Genehmigung, um die Änderung vorzunehmen. Danke für Ihren Vorschlag. :) Rob Waa vor 5 Jahren 0
`/ usr / lib` befindet sich bereits im Loader-Suchpfad, daher sollten Sie die Variable vollständig entfernen können. Ignacio Vazquez-Abrams vor 5 Jahren 0
Du hast wieder recht. Gerade nachgeguckt. Ich habe die E-Mail mit meiner Anfrage aktualisiert. Dass ich diese bestimmte Zeile auskommentieren werde. Vielen Dank! Sind Qt-Bibliotheken standardmäßig abwärtskompatibel und der Grund, warum `readelf` die älteren Versionen anzeigt? Rob Waa vor 5 Jahren 0
Im Allgemeinen funktioniert es so, dass untergeordnete Versionen von Bibliotheken abwärtskompatibel sein sollten und Hauptversionen möglicherweise die API beschädigen. Ignacio Vazquez-Abrams vor 5 Jahren 0
OK, danke für das Aufräumen. Ich habe auch gerade eine Antwort vom Unternehmen erhalten. Also bin ich gut zu gehen. Danke für Ihre Hilfe. Wie markiere ich Ihren Kommentar als akzeptierte Antwort? Rob Waa vor 5 Jahren 0
Du nicht lass mich etwas schreiben ... Ignacio Vazquez-Abrams vor 5 Jahren 0

1 Antwort auf die Frage

0
Ignacio Vazquez-Abrams

Im Allgemeinen sind Bibliotheken in kleineren Versionen abwärtskompatibel. Daher sollten Sie das System Qt5 anstelle des gelieferten verwenden können. Sie können dies tun, indem Sie die 5.6-Bibliotheksdateien entfernen. Wenn dies die einzigen Bibliotheksdateien sind, die in diesem Verzeichnis importiert werden, können Sie sie $LD_LIBRARY_PATHvollständig weglassen .