Czy to normalne, że w środowisku brakuje zmiennej LD_LIBRARY_PATH?


15

Odkryłem przypadkowo, że na moim Debianie Jessie nie ma żadnej LD_LIBRARY_PATHzmiennej (dokładnie mówiąc, nie ma printenv | grep LDnic związanego z linkerem i nie echo "$LD_LIBRARY_PATH"pokazuje również niczego).

Tak jest w przypadku emulatora terminala x ( który może to wyczyścić z powodu setgid ), a także w podstawowym terminalu ( Ctrl+Alt+F1).

Wiem, że LD_LIBRARY_PATH może to być uważane za złe, więc Debian może go jakoś zablokować, ale z drugiej strony jest kilka plików, /etc/ld.so.conf.d/które zawierają katalogi do dodania LD_LIBRARY_PATH. Żaden z moich plików rc (o których wiem) nie zadziera z LD_LIBRARY_PATHżadnym z nich.

Dlaczego nie widzę LD_LIBRARY_PATHzmiennej?

Odpowiedzi:


22

Tak, to normalne, że nie masz żadnych wyraźnych LD_LIBRARY_PATH. Przeczytaj także ldconfig (8) i ld-linux (8) oraz o rpath . Zauważ, że ldconfigaktualizacje /etc/ld.so.cache, a nie LD_LIBRARY_PATH. Czasami jawnie ustawiasz ścieżkę do pliku wykonywalnego z -Wl,-rpath,katalogiem przekazywanym gccw czasie łącza.

Jeśli potrzebujesz LD_LIBRARY_PATH(ale prawdopodobnie nie powinieneś), ustaw go samodzielnie (np. W ~/.bashrc).

Jeśli potrzebujesz szerokie ustawień systemowych, można na przykład rozważyć dodanie /usr/local/lib/w /etc/ld.so.confi uruchomić ldconfigpo zainstalowaniu tam każdej bibliotece.

AFAIK $LD_LIBRARY_PATHjest używany tylko przez dynamiczny linker ld-linux.so(i przez dlopen (3), który go używa) po execve (2) . Zobacz także ldd (1) .

Przeczytaj więcej informacji na temat pisania wspólnych bibliotek przez Dreppera .


To był mój błąd, myślałem, że LD_LIBRARY_PATH jest produktem działania ldconfig. Tymczasem jest to wejście ldconfig wraz z plikami w /etc/ld.so.conf.
calavera.info,

1
Mam wrażenie, że ldconfignie używaj $LD_LIBRARY_PATH(który jest używany tylko na ld-linux.soczas)
Basile Starynkevitch

3
@ calavera.info to nie jest ani jedno, ani drugie. Dynamiczny linker używa LD_LIBRARY_PATH razem z wyjściem ldconfigw czasie wykonywania. ldconfignie używa ani nie zmienia LD_LIBRARY_PATH.
hobbs

Teraz widzę, że całkowicie go popsułem, prawdopodobnie spędzając zbyt dużo czasu w Javie, gdzie „ścieżka klasy” jest wirtualnie jedyną konfiguracją dynamicznego łączenia. Wszystko wydaje się teraz jasne, wielkie dzięki.
calavera.info
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.