SuSE GmbH

SuSE Support-Datenbank

Titel: cannot open shared object file/can't resolve symbol

----------

Übersicht o Stichwortsuche o History o Versionen o Kategorien o Alle Artikel

----------

cannot open shared object file/can't resolve symbol

Bezieht sich auf

SuSE Linux: Version 6.0

Symptom:

Sie haben ein Update von SuSE 5.3 oder 5.2 auf 6.0 durchgeführt. Manche Programme, die vorher liefen, melden nun Fehler. Zum Beispiel tritt das bei KDE-Programmen auf. Der Fehler sieht z.B. so aus:
ksendfax: can't resolve symbol '__vt_11QPushButton.12QPaintDevice'
ksendfax: can't resolve symbol '__vt_11QPushButton'
ksendfax: can't resolve symbol '__vt_7QSlider.12QPaintDevice'
ksendfax: can't resolve symbol '__vt_7QSlider.13QRangeControl'
ksendfax: can't resolve symbol '__vt_11QPushButton.12QPaintDevice'
ksendfax: can't resolve symbol '__vt_6QFrame'
ksendfax: can't resolve symbol '__vt_7QSlider'
ksendfax: can't resolve symbol '__vt_4QTab'
ksendfax: can't resolve symbol '__vt_11QPushButton'
ksendfax: can't resolve symbol '__vt_6QFrame.12QPaintDevice'
ksendfax: can't resolve symbol '__vt_5QDate'
Oder aber auch so:
libc.so.5: cannot open shared object file: No such file or directory

Ursache:

Beim Starten des Programmes wird eine falsche Bibliothek geladen. Wird z.B. statt der Bibliothek Qt-1.42 (SuSE 6.0) die Version Qt-1.33 (SuSE 5.3) geladen, so meldet der Linker das Fehlen von Symbolen wie __vt_6QFrame. Eine weitere Auswirkung kann sein, daß sich die falsch geladene Bibliothek wiederum auf andere Bibliotheken bezieht, die im neuen System nicht mehr vorhanden sind. Wichtigstes Beispiel ist hier die libc.so.5, welche in SuSE 6.0 durch libc.so.6 ersetzt wurde. Dazu kann geführt haben:
  1. Beim Update wurden nicht alle Pakete upgedated.
  2. Sie haben vor oder nach dem Update auf 6.0 selbst Bibliotheken aus dem Internet geholt und installiert, z.B. eine neue Version der Qt-Bibliothek.
  3. Sie haben Programme aus dem Internet geholt und installiert, ohne sie auf ihrem Rechner nach dem Update neu zu übersetzen.

Lösung:

Genauere Diagnose

Verwenden Sie den Befehl /sbin/ldconfig -p, um eine Liste aller Bibliotheken zu bekommen, die vom Linker gefunden werden:
root@erde > /sbin/ldconfig -p
523 libs found in cache `/etc/ld.so.cache' (version 1.7.0)
        libzvt.so.0 (libc5) => /usr/i486-linux-libc5/lib/libzvt.so.0
        libzvt.so (libc5) => /usr/i486-linux-libc5/lib/libzvt.so
        libz.so.1 (libc6) => /usr/X11R6/lib/libz.so.1
        libz.so.1 (libc5) => /usr/i486-linux-libc5/lib/libz.so.1
        libz.so (libc6) => /usr/X11R6/lib/libz.so
        libz.so (libc5) => /usr/i486-linux-libc5/lib/libz.so
        libxview.so.3 (libc5) => /usr/i486-linux-libc5/lib/libxview.so.3
        libxview.so.3 (libc6) => /usr/openwin/lib/libxview.so.3
        libxview.so (libc5) => /usr/i486-linux-libc5/lib/libxview.so

	...

        libBrokenLocale.so.1 (libc6) => /lib/libBrokenLocale.so.1
        libBrokenLocale.so (libc6) => /usr/lib/libBrokenLocale.so
        ld-linux.so.2 (ELF) => /lib/ld-linux.so.2
        ld-linux.so.1 (libc5) => /usr/i486-linux-libc5/lib/ld-linux.so.1
        ld-linux.so.1 (ELF) => /lib/ld-linux.so.1
Bei jeder Bibliothek steht in Klammer, ob sie gegen libc5 oder libc6 gelinkt ist. Außerdem sehen Sie, an welcher Stellen im Dateisystem die Bibliothek gefunden wurde. Verdächtig ist es, wenn sie Bibliotheken finden, die gegen libc5 gelinkt sind, sich aber nicht unter /usr/i486-linux-libc5/ befinden. Z.B. ist es verdächtig, wenn Sie zusätzlich zur neuesten Version der Qt-Bibliothek unter /lib/libqt.so noch eine alte Version unter /usr/X11R6/lib haben. Wenn Sie wissen wollen, auf welche Bibliotheken sich eine Programm oder eine Bibliothek stützt, können Sie dafür den Befehl ldd voller Pfad verwenden:
root@erde > ldd /opt/kde/bin/kdm
        libkimgio.so.2 => /opt/kde/lib/libkimgio.so.2 (0x40000000)
        libjpeg.so.6 => /usr/lib/libjpeg.so.6 (0x4000f000)
        libqt.so.1 => /usr/lib/libqt.so.1 (0x40033000)
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x4020b000)
        libkdecore.so.2 => /opt/kde/lib/libkdecore.so.2 (0x402b0000)
        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40358000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x40366000)
        libutil.so.1 => /lib/libutil.so.1 (0x40394000)
        libstdc++.so.2.9 => /usr/lib/libstdc++.so.2.9 (0x40398000)
        libm.so.6 => /lib/libm.so.6 (0x403dc000)
        libc.so.6 => /lib/libc.so.6 (0x403f6000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)

root@erde > ldd /usr/lib/libjpeg.so.6
        libc.so.6 => /lib/libc.so.6 (0x4002c000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)
Das Beheben des Fehlers liegt fast immer in der richtigen Installation und Deinstallation von Paketen. Bitte verschieben, kopieren und löschen sie keine Bibliotheken, wenn Sie nicht genau wissen, was Sie damit bewirken! Im schlimmsten Fall wird ihr System unbrauchbar und muß neu installiert werden! Wenn Sie wissen wollen, aus welchem Paket eine Datei kommt, so können Sie recht komfortabel den Befehl rpm -qf Dateiname verwenden:
root@erde > rpm -qf /lib/libc.so.6
shlibs-98.12.11-0

----------

Siehe auch:

----------

Stichwörter: LIBC5, LIBC6, KDE, QT, UPDATE, SHARED, BIBLIOTHEK, LIBC.SO.5, SYMBOL, RESOLVE

----------

Übersicht o Stichwortsuche o History o Versionen o Kategorien o Alle Artikel

----------

SDB-kettner_shlibs, Copyright SuSE GmbH, Nuremberg, Germany - Version: 08. Jan 1999
SuSE GmbH - Zuletzt generiert: 03. Oct 1999 22:31:54 by maddin with sdb_gen 1.00.0