Ich habe mehrere Version der gleichen Bibliothek, die mein Programm dynamisch verknüpft. Manchmal möchte ich die Version ändern, die verwendet wird.Temporäre Bibliothek Suchpfad in Ubuntu
Ich habe gelesen, dass neue Versionen von Ubuntu nicht mehr LD_LIBRARY_PATH
aus Sicherheitsgründen unterstützen. Ich könnte den Pfad zu /etc/ld.so.conf
hinzufügen und ldconfig
ausführen, aber ich werde nicht immer Root-Berechtigungen auf dem System haben.
Wer weiß, wie man den Bibliothekssuchpfad ändert, den ein einfacher Benutzer machen kann? Angenommen, es passiert oft genug, dass das Aktualisieren von Konfigurationsdateien der letzte Ausweg ist.
Edit: Hier ist, wie ich testen, was ich zu sehen erwarte und so weiter: Ich laufe ldd
auf ein Programm und siehe libfoo.so => /some/path/to/lib/libfoo.so
. Ich stelle /path/to/different/version/lib
(die eine Datei mit dem Namen libfoo.so enthält) an LD_LIBRARY_PATH
vor und führe ldd
erneut aus. Der Pfad für libfoo.so ist derselbe wie zuvor, als ich erwarten würde, libfoo.so => /path/to/different/version/lib/libfoo.so
zu sehen.
Danke,
Andrew
Ich baue die ausführbare Datei von der Quelle, also kann ich Kompilierung ändern/Verknüpfungsoptionen, ob das helfen würde. Basiert RPATH bei der Kompilierung auf der Option -L? Es gibt eine -Wl, -R/Pfad/zu/lib, die ich nicht verstehe. Nur um klar zu sein, basierend auf den Dokumenten, was ich versuche zu tun _should_ Arbeit, nicht wahr? – ajwood
Es scheint nur so zu sein, als sollte es eine Möglichkeit geben, dem Programm einen Standard zu geben, aber der Benutzer kann es zur Laufzeit überschreiben, wenn er möchte. – ajwood
Die Verknüpfung mit dem RPATH (wie beschrieben) wird den Library-Suchpfad wie gewünscht fest codieren. Das Hauptproblem besteht darin, es zu ändern, was Sie tun können, indem Sie es neu verknüpfen oder indem Sie patchelf verwenden. – EmeryBerger