Programm [Digikam] wählt falsche qt lib und stürzt ab

7

Ich verwende Ubuntu 14.04 64bit. Digikam arbeitete früher, hörte aber kürzlich auf zu arbeiten.

Ich habe mich gefragt, ob mir jemand helfen kann, dieses Problem zu lösen.

Ich habe eine Antwort von der Digikam-Mailingliste erhalten, die besagt, dass dies nicht wirklich ein Digikam-Problem ist, sondern ein Problem auf meinem System, bei dem ein Konflikt mit Qt4 und Qt5 besteht. Die Stapelverfolgung unten zeigt, wie Digikam auf einer Qt5-Bibliothek abstürzt, aber nur mit Qt4 programmiert ist.

Irgendwelche Vorschläge?

apt-cache policy digikam
digikam:
  Installed: 4:3.5.0-0ubuntu10
  Candidate: 4:3.5.0-0ubuntu10
  Version table:
 *** 4:3.5.0-0ubuntu10 0
        500 http://au.archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages
        100 /var/lib/dpkg/status


gdb digikam
Reading symbols from digikam...Reading symbols from /usr/lib/debug/.build-id/89/8c66e5a3a2b8dce7156f7e8c1698e4bd29ef9d.debug...done.
done.
(gdb) catch throw
Catchpoint 1 (throw)
(gdb) run
Starting program: /usr/bin/digikam 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
__strcmp_ssse3 () at ../sysdeps/x86_64/multiarch/../strcmp.S:286
286 ../sysdeps/x86_64/multiarch/../strcmp.S: No such file or directory.
(gdb) bt
#0  __strcmp_ssse3 () at ../sysdeps/x86_64/multiarch/../strcmp.S:286
#1  0x00007fffdf31609e in QMetaType::registerNormalizedType(QByteArray const&, void (*)(void*), void* (*)(void const*), void (*)(void*), void* (*)(void*, void const*), int, QFlags<QMetaType::TypeFlag>, QMetaObject const*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007fffdeb0b7b7 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#3  0x00007ffff7dea13a in call_init (l=<optimised out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffdf38, env=env@entry=0x7fffffffdf48) at dl-init.c:78
#4  0x00007ffff7dea223 in call_init (env=<optimised out>, argv=<optimised out>, argc=<optimised out>, l=<optimised out>) at dl-init.c:36
#5  _dl_init (main_map=0x7ffff7ffe1c8, argc=1, argv=0x7fffffffdf38, env=0x7fffffffdf48) at dl-init.c:126
#6  0x00007ffff7ddb30a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#7  0x0000000000000001 in ?? ()
#8  0x00007fffffffe29c in ?? ()
#9  0x0000000000000000 in ?? ()
(gdb) quit
A debugging session is active.

    Inferior 1 [process 10315] will be killed.

Quit anyway? (y or n) y

Die Ausgabe des qtchooser-Tools

$ qtchooser -l
4
5
default
qt4-x86_64-linux-gnu
qt4
qt5-x86_64-linux-gnu
qt5
$ qtchooser -print-env
QT_SELECT="default"
QTTOOLDIR="/usr/lib/x86_64-linux-gnu/qt4/bin"
QTLIBDIR="/usr/lib/x86_64-linux-gnu"

Ich weiß, dass es in / usr / lib / x86_64-linux-gnu keine Bibliotheken namens Qt4 * gibt, obwohl ich die meisten libqt4-Pakete aus dem Haupt-Repo installiert (und neu installiert) habe.

jbbiomed
quelle
Geschieht dies mit der vom offiziellen Ubuntu-Repository angebotenen Version?
Xangua
Ja. Das Entfernen des ppa und das Zurücksetzen auf die offizielle Repo-Version 3.5 (sehr alt) stürzt immer noch ab. Ich werde den Stack-Trace für die offizielle Repo-Version
aktualisieren
Könnten Sie die Ausgabe von qtchooser -l undqtchooser -print-env
user.dz
Ja, den ursprünglichen Beitrag aktualisiert. Ich bin nicht sicher, wo sich die libqt4-Dateien befinden. Wenn Sie locate libQt4 ausführen, wird nichts zurückgegeben, während libQt5 alle Dateien in "/ usr / lib / x86_64-linux-gnu" sowie eine Vielzahl von app-spezifischen Ordnern in / opt zurückgibt.
jbbiomed
Ich habe mir das Paket in den Repos für qt4 angesehen und festgestellt, dass ihnen nicht "qt4" vorangestellt ist und die Dateien, die installiert werden sollen, tatsächlich auf meinem System funktionieren.
jbbiomed

Antworten:

1

Das Problem war also, dass ich opencvvon der Quelle aus installiert hatte /usr/local. Deinstallieren und Entfernen der verbleibenden Dateien aus /usr/libund /usr/includebehoben den defekten Link zu qt und Neuinstallation digikambehoben alles.

Der Hinweis war, die manuell installierten Dinge zu überprüfen, in denen sie sitzen, /usrfalls einer von ihnen in Konflikt steht.

jbbiomed
quelle