2011-01-09 4 views
3

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

Antwort

7

Sie patchelf verwenden können den RPATH (Bibliothekssuchpfad) zu ändern jede ausführbare Datei. Es ist ein cooles Dienstprogramm und erfordert keine speziellen Berechtigungen zum Ausführen. Um ein Programm zu ersten Such gesetzt /opt/my-libs/lib dann /foo/lib, tun gerade dies:

% patchelf --set-rpath /opt/my-libs/lib:/foo/lib program 
+0

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

+0

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

+0

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