Ist es normal, dass die Variable LD_LIBRARY_PATH in einer Umgebung fehlt?

15

Ich habe durch Zufall herausgefunden, dass es auf meinem Debian Jessie keine LD_LIBRARY_PATHVariable gibt (um genau zu sein, printenv | grep LDzeigt nichts, was mit dem Linker zu echo "$LD_LIBRARY_PATH"tun hat und zeigt auch nichts).

Dies ist sowohl im x-Terminal-Emulator ( der möglicherweise durch setgid gelöscht wird ) als auch im Basis-Terminal ( Ctrl+Alt+F1) der Fall .

Ich weiß, dass LD_LIBRARY_PATH dies als schlecht angesehen werden kann, so dass Debian es vielleicht irgendwie blockiert, aber andererseits gibt es ein paar Dateien /etc/ld.so.conf.d/, die einige Verzeichnisse enthalten, die hinzugefügt werden müssen LD_LIBRARY_PATH. Keine meiner rc-Dateien (die ich kenne) ist mit irgendetwas zu LD_LIBRARY_PATHtun.

Warum sehe ich keine LD_LIBRARY_PATHVariable?

calavera.info
quelle

Antworten:

22

Ja, es ist normal, dass Sie keine explizite haben LD_LIBRARY_PATH. Lesen Sie auch ldconfig (8) und ld-linux (8) und den Pfad . Beachten Sie, dass ldconfigUpdates /etc/ld.so.cache, nicht die LD_LIBRARY_PATH. Manchmal legen Sie den Pfad einer ausführbaren Datei explizit mit dem -Wl,-rpath,Verzeichnis fest, das zur gccVerbindungszeit übergeben wird.

Wenn Sie ein benötigen LD_LIBRARY_PATH(sollten Sie aber wahrscheinlich nicht), setzen Sie es selbst ein (z ~/.bashrc. B. in ).

Wenn Sie systemweite Einstellungen benötigen, könnten Sie beispielsweise prüfen , indem /usr/local/lib/in /etc/ld.so.confund führen Sie ldconfignach der Installation von jeder Bibliothek gibt.

AFAIK $LD_LIBRARY_PATHwird nur vom dynamischen Linker ld-linux.so(und von dlopen (3), der es verwendet) nach execve (2) verwendet . Siehe auch ldd (1) .

Lesen Sie Dreppers How To Write Shared Libraries für mehr.

Basile Starynkevitch
quelle
Das war mein Fehler, ich dachte, dass LD_LIBRARY_PATH das Produkt des Laufens ist ldconfig. Inzwischen ist es die Eingabe von ldconfig zusammen mit Dateien in /etc/ld.so.conf.
calavera.info
1
Mein Gefühl ist, dass ldconfignicht verwenden $LD_LIBRARY_PATH(was nur zur ld-linux.soZeit verwendet wird)
Basile Starynkevitch
3
@ calavera.info ist es auch nicht. Der dynamische Linker wird LD_LIBRARY_PATH zusammen mit der Ausgabe von ldconfigzur Laufzeit verwendet. ldconfigweder verwendet noch verändert LD_LIBRARY_PATH.
Hobbs
Jetzt kann ich sehen, dass ich es total durcheinander gebracht habe, wahrscheinlich weil ich zu viel Zeit in Java verbracht habe, wo "classpath" die einzige Konfiguration für dynamisches Verknüpfen ist. Alles scheint jetzt klar zu sein, vielen Dank.
calavera.info