Wenn ich einen Prozess ausführe, der zur Laufzeit mit einer gemeinsam genutzten Bibliothek verknüpft ist (verknüpft, wenn der Prozess gestartet wird, nicht verknüpft mit dlload()
), wo sucht er nach dieser gemeinsam genutzten Bibliothek ( .so
) -Datei anders als LD_LIBRARY_PATH
?
Hintergrund:
Ich habe C ++ - Code geschrieben, der eine bestimmte Bibliothek eines Drittanbieters verwendet. Ich habe die Bibliothek installiert und meinen Code auf zwei verschiedenen Plattformen kompiliert, sowohl Ubuntu als auch verschiedene Versionen und auch verschiedene Versionen von gcc. Die Bibliothek wurde aus dem Quellcode kompiliert und installiert und befindet sich /usr/local/lib
auf beiden Plattformen. Wenn ich meinen Code kompiliere, verknüpfe ich mich mit den pkg-config --libs
Parametern für die Drittanbieter-Bibliothek und habe überprüft, dass pkg-config --libs
auf beiden Plattformen genau dasselbe zurückgegeben wird.
Mein Code wird auf beiden Plattformen erfolgreich kompiliert und LD_LIBRARY_PATH
ist auf beiden Plattformen nicht definiert (oder als leer definiert ""
:). Wenn ich es jedoch auf einer Platoform starte, funktioniert es einwandfrei, und auf der anderen bekomme ich den folgenden Fehler:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Witzigerweise diejenigen , die nicht tut Arbeit ist die neuere Version von Ubuntu und gcc. : /
Also versuche ich herauszufinden, wie der funktionierende Benutzer die Bibliothek finden kann, damit der kaputte Benutzer die Bibliothek auf die gleiche Weise findet. (dh ohne Einstellung LD_LIBRARY_PATH
)
Aktualisieren:
Hier ist meine Ausgabe von cat /etc/ld.so.conf.d/*
... auf dem funktionierenden (älteren) System:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... auf dem kaputten (neueren) System:
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
aber es gibt immer noch den Fehler error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... Gibt es einen Grund, warum es kein Verzeichnis abholen würde /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
wie unten vorgeschlagen zu starten . Wenn es immer noch nicht funktioniert, aktualisieren Sie Ihre Frage mit der Ausgabe von ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, aber ich bin mir nicht sicher.