Ich habe einige Bibliotheken aus Quellen erstellt und die Dateien danach make install
sind in/usr/local/lib
In meinem Fall habe ich zum Beispiel die Datei, libodb-2.2.so
die sich in diesem Verzeichnis befindet.
Wenn ich jedoch die ausführbare Datei starte, mit der die Verknüpfung hergestellt wurde libodb
, wird der folgende Fehler angezeigt: Fehler beim Laden der gemeinsam genutzten Bibliotheken:libodb-2.2.so: cannont open shared object file: No such file or directory.
Bedeutet das, dass ich meine ausführbare Datei nicht richtig erstellt habe? oder soll ich dem system mitteilen, dass sich im ordner /usr/local/lib
auch interessante libs befinden können ?
Ich verwende Ubuntu 12.04, Linux-Kernel 3.2.0-38-generic.
gdb
bei einemlink
Problem zum Beispiel ohnehin geholfen hätte . Ich bin wirklich neugierig. Zunächst scheint mir Ihre Bemerkung nichts mit dem Problem zu tun zu haben. Aber ich kann mich irren. In der Tat weiß ich nicht genuggdb
, und das Laden von Bibliotheken.Antworten:
Für die aktuelle Sitzung können Sie
oder die Änderung vorzunehmen permanent können Sie hinzufügen ,
/usr/local/lib
um/etc/ld.so.conf
(es enthält oder etwas) und führen Sieldconfig
als root.Wenn Sie immer noch Probleme haben,
ldd [executable name]
zeigt Ihnen das Ausführen, welche Bibliotheken gesucht werden und welche nicht gefunden werden können.quelle
man
Seite fürldd(1)
"Im Normalfall ruft ldd den dynamischen Standardlinker (sieheld.so(8)
) mit derLD_TRACE_LOADED_OBJECTS
Umgebungsvariablen auf1
, wodurch der Linker die Bibliotheksabhängigkeiten anzeigt. Beachten Sie jedoch, dass unter bestimmten Umständen einige Versionen vonldd
möglicherweise Versuchen Sie, die Abhängigkeitsinformationen durch direktes Ausführen des Programms zu ermitteln. Verwenden Sie daher niemalsldd
eine nicht vertrauenswürdige ausführbare Datei , da dies zur Ausführung von beliebigem Code führen kann. Eine sicherere Alternative beim Umgang mit nicht vertrauenswürdigen ausführbaren Dateien ist: "$ objdump -p /path/to/program | grep NEEDED
"-L
und-rpath
während des Kompilierens zum Festlegen des Verknüpfungssuchpfads und des Laufzeitsuchpfads für Bibliotheken gemäß dieser Frage und Antwort der richtige Weg .Wenn Sie
ldconfig
die Bibliothek bereits erstellt haben, lesen Sie weiter. Wenn nicht, lesen Sie zuerst ldconfig ./usr/local/lib
befindet sich möglicherweise nicht im von ldconfig verwendeten Bibliothekspfad. Sie können dies einfach tun:Und das Zeug sollte zum Linker-Cache hinzugefügt werden, aber es ist wahrscheinlich besser, den Pfad richtig hinzuzufügen. Stellen Sie sicher, dass Sie ein
/etc/ld.so.conf.d
Verzeichnis haben. Wenn ja, fügen Sie eine Datei hinzu (nennen Sie sie "usr-local.conf" oder was auch immer) und fügen Sie eine Zeile ein:Jetzt lauf
ldconfig
. Wenn Sie nicht über das Verzeichnis ld.so.conf.d verfügen, sollten Sie über eine/etc/ld.so.conf
Datei verfügen , und Sie können diese Zeile am Ende hinzufügen.quelle
/etc/ld.so.conf.d
sudoed ldconfig hinzugefügt, um dies zu berücksichtigen, und meine ausführbare Datei kann jetzt gestartet werden.