Provided by: manpages-pl_0.6-2_all 

NAZWA
ld.so, ld-linux.so* - dynamiczny konsolidator/ładowacz
SKŁADNIA
Konsolidator dynamiczny może być uruchomiony albo pośrednio przez uruchomienie jakiegokolwiek
skonsolidowanego dynamicznie programu lub biblioteki (w tym przypadku żadna opcja linii poleceń nie
będzie przekazana do konsolidatora dynamicznego i w przypadku ELF-a uruchomiony zostanie konsolidator
dynamiczny przechowywany w sekcji .interp programu), albo bezpośrednio przez uruchomienie:
/lib/ld-linux.so.* [OPCJE] [PROGRAM [ARGUMENTY]]
OPIS
Programy ld.so i ld-linux.so* wyszukują i uruchamiają biblioteki dzielone wymagane przez program,
przygotowują program do uruchomienia, a w końcu go uruchamiają.
Binarki linuksowe wymagają konsolidacji dynamicznej (czyli konsolidacji podczas uruchamiania), chyba że
podczas kompilacji programowi ld(1) przekazano opcję -static.
Program ld.so obsługuje binarki w używanym dawno temu formacie a.out; ld-linux.so* obsługuje format ELF
(/lib/ld-linux.so.1 dla libc5, /lib/ld-linux.so.2 dla glibc2), który jest używany przez wszystkich już od
ładnych paru lat. Poza tym oba programy zachowują się tak samo i używają tych samych plików pomocniczych
i programów: ldd(1), ldconfig(8) oraz /etc/ld.so.conf.
Podczas rozwiązywania zależności bibliotek, konsolidator dynamiczny najpierw przegląda każdy łańcuch
znaków zależności w poszukiwaniu znaku ukośnika (może wystąpić, jeśli podczas linkowania biblioteki
podano nazwę ścieżki zawierającą ukośniki). Jeśli taki znak zostanie znaleziony, to łańcuch znaków
zależności jest interpretowany jako nazwa (względnej lub bezwzględnej) ścieżki i biblioteka jest
ładowana, używając tej nazwy ścieżki.
Jeśli zależność od biblioteki nie zawiera znaku ukośnika, to potrzebne biblioteki dzielone są szukane w
następującej kolejności:
o (Tylko ELF). Używa katalogów podanych w sekcji atrybutów dynamicznych DT_RPATH binarki, jeśli jest
obecna i nie istnieje atrybut DT_RUNPATH. Użycie DT_RPATH jest przestarzałe.
o Przy użyciu zmiennej środowiskowej LD_LIBRARY_PATH. Poza binariami z ustawionym bitem
set-user-ID/set-group-ID,dla których jest to ignorowane.
o (Tylko ELF) Używając katalogów podanych w sekcji atrybutów dynamicznych DT_RUNPATH binarki, jeśli taka
sekcja istnieje.
o Z pliku bufora /etc/ld.so.cache, zawierającego skompilowaną listę bibliotek poprzednio znalezionych w
ścieżce bibliotek. Jeśli jednakże program binarny został skonsolidowany z opcją linkera -z nodeflib,
to pomijane są biblioteki z domyślnych ścieżek bibliotek. Preferowane są biblioteki zainstalowane w
katalogach zgodnych z właściwościami sprzętu (patrz niżej).
o W domyślnej ścieżce /lib a potem w /usr/lib. Ten krok jest pomijany, jeśli program binarny został
skonsolidowany z opcją -z nodeflib konsolidatora.
Rozwijanie zmiennych w rpath
ld.so rozumie pewne łańcuchy znaków w specyfikacji rpath (DT_RPATH lub DT_RUNPATH); łańcuch ty są
zamieniane następująco:
$ORIGIN (lub równoważnie ${ORIGIN})
Rozwija się do katalogu zawierającego plik wykonywalny aplikacji. Tak więc aplikacja znajdująca
się w jakimśkatalogu/app może zostać skompilowana z
gcc -Wl,-rpath,'$ORIGIN/../lib'
tak żeby przypisane jej biblioteki dzielone mogły być umieszczone w jakimśkatalogu/lib,
niezależnie od tego, gdzie jakiśkatalog jest umieszczony w hierarchii katalogów. Umożliwia to
tworzenie aplikacji, które nie muszą być instalowane w specjalnych katalogów, ale mogą po prostu
być rozpakowane w dowolnym katalogu i wciąż będą mogły znaleźć swoje biblioteki dzielone.
$LIB (lub równoważnie ${LIB})
Rozwija się do lib lub lib64 w zależności od architektury (np. na x86-64 rozwija się lib64, a na
x86-32 rozwija się do lib).
$PLATFORM (lub równoważnie ${PLATFORM})
Rozwija się do łańcucha znaków odpowiadającemu typowi procesora systemu (np. "x86_64"). Na
niektórych architekturach jądro Linuksa nie przekazuje konsolidatorowi dynamicznemu oznaczenia
platformy. Wartość tego łańcucha znaków jest pobierana z wartości AT_PLATFORM pomocniczego wektora
(patrz getauxval(3)).
OPCJE
--list Wyświetla wszystkie zależności wraz ze sposobem ich rozwiązania.
--verify
Sprawdza, że program jest konsolidowany dynamicznie i że ten konsolidator dynamiczny może go
obsłużyć.
--library-path PATH
Używa PATH zamiast ustawienia zmiennej środowiska LD_LIBRARY_PATH (patrz niżej).
--inhibit-rpath LISTA
Ignoruje informacje RPATH i RUNPATH w nazwach obiektów w LIŚCIE. Opcja jest ignorowana, jeśli
ld.so ma ustawiony bit set-user-ID lub set-group-ID.
--audit LISTA
Używa obiektów wymienionych w LIŚCIE jako audytorów.
WŁAŚCIWOŚCI SPRZĘTOWE
Niektóre biblioteki są kompilowane z użyciem specyficznych dla danego sprzętu instrukcji, które nie
muszą istnieć na każdym CPU. Takie biblioteki powinny być instalowane w katalogach, których nazwy
określają wymagane właściwości sprzętu, na przykład /usr/lib/sse2/. Konsolidator dynamiczny porównuje
nazwy takich katalogów ze sprzętem maszyny i wybiera najbardziej odpowiednią wersję danej biblioteki.
Katalogi właściwości sprzętu mogą tworzyć kaskady, dopuszczając kombinacje cech CPU. Lista nazw
wspieranych właściwości sprzętowych zależy od CPU. Obecnie rozpoznawane są następujące nazwy:
Alpha ev4, ev5, ev56, ev6, ev67
MIPS loongson2e, loongson2f, octeon, octeon2
PowerPC
4xxmac, altivec, arch_2_05, arch_2_06, booke, cellbe, dfp, efpdouble, efpsingle, fpu, ic_snoop,
mmu, notb, pa6t, power4, power5, power5+, power6x, ppc32, ppc601, ppc64, smt, spe, ucache, vsx
SPARC flush, muldiv, stbar, swap, ultra3, v9, v9v, v9v2
s390 dfp, eimm, esan3, etf3enh, g5, highgprs, hpage, ldisp, msa, stfle, z900, z990, z9-109, z10, zarch
x86 (tylko 32-bitowe)
acpi, apic, clflush, cmov, cx8, dts, fxsr, ht, i386, i486, i586, i686, mca, mmx, mtrr, pat, pbe,
pge, pn, pse36, sep, ss, sse, sse2, tm
ŚRODOWISKO
Wśród ważniejszych zmiennych środowiskowych są następujące:
LD_ASSUME_KERNEL
(glibc od wersji 2.2.3). Każda biblioteka dzielona może informować konsolidator dynamiczny o
wymaganej minimalnej wersji ABI jądra (To wymaganie jest zakodowane w sekcji "note" ELF-a; sekcja
ta jest widoczna w readelf -n jako sekcja oznaczona NT_GNU_ABI_TAG). Podczas działania
konsolidator dynamiczny określa wersję ABI uruchomionego jądra i odrzuca biblioteki dzielone,
które wymagają minimalnej wersji ABI większej niż wersja ABI uruchomionego jądra.
LD_ASSUME_KERNEL może zostać użyta do spowodowania, że konsolidator dynamiczny założy, że jest
uruchomiony na systemie z inną wersją ABI jądra. Na przykład następująca linia poleceń powoduje,
że konsolidator dynamiczny podczas ładowania bibliotek dzielonych wymaganych przez mójprog
zakłada, że działa w systemie Linux 2.2.5
$ LD_ASSUME_KERNEL=2.2.5 ./mójprog
W systemach, które dostarczają wielu wersji biblioteki dzielonej (w różnych katalogach w ścieżce
wyszukiwania) o różnych minimalnych wymaganiach wersji ABI jądra, LD_ASSUME_KERNEL może zostać
użyte do wybrania tej wersji biblioteki, która zostanie użyta (w zależności od porządku
przeszukiwania katalogów). Historycznie najczęstszym użyciem LD_ASSUME_KERNEL było ręczne
wybieranie starszej implementacji POSIX-owych wątków LinuxThreads w systemach, które miały
zainstalowane zarówno LinuxThreads, jak i NPTL (który był domyślną wersją na takich systemach);
patrz pthreads(7).
LD_BIND_NOT
(glibc od wersji 2.2) Podczas rozwijania symbolu nie aktualizuje Global Offset Table (GOT) i
Procedure Linkage Table (PLT).
LD_BIND_NOW
(libc5; glibc od wersji 2.1.1) Gdy zmienna ta jest obecna, sprawia, że dynamiczny konsolidator
rozwiąże wszystkie symbole podczas startu programu, a nie wtedy gdy będzie do nich pierwsze
odniesienie. Jest to użyteczne podczas używania debuggera.
LD_LIBRARY_PATH
Oddzielona dwukropkami lista katalogów, w których szukać bibliotek ELF podczas wykonywania.
Podobne do zmiennej środowiskowej PATH. Ignorowane w przypadku programów z ustawionym bitem
set-user-ID lub set-group-ID.
LD_PRELOAD
Lista dodatkowych, podanych przez użytkownika bibliotek dzielonych ELF, którą należy załadować
przed wszystkimi innymi. Elementy listy mogą być oddzielone od siebie spacjami lub dwukropkami.
Umożliwia to wybiórczą zamianę funkcji w innych bibliotekach dzielonych. Może być używane do
wybiórczego nadpisywania funkcji z innych bibliotek dzielonych. Biblioteki są wyszukiwane zgodnie
z regułami podanymi w rozdziale OPIS.Dla plików binarnych ELF z ustawionym bitem
set-user-ID/set-group-ID, nazwy ścieżek zawierając ukośniki są ignorowane, a biblioteki ze
standardowej ścieżki katalogów ładowane będą tylko wtedy, gdy mają także ustawiony bit
set-user-ID.
LD_TRACE_LOADED_OBJECTS
(tylko ELF) Gdy zmienna ta jest ustawiona na niepusty łańcuch znaków, to powoduje, że program
wypisze swoje zależności od bibliotek dynamicznych, tak jakby był uruchomiany przez ldd(1), a nie
normalnie.
Jest także wiele bardziej lub mniej mętnych zmiennych, wiele przestarzałych lub przeznaczonych do użytku
wewnętrznego.
LD_AOUT_LIBRARY_PATH
(libc5) Wersja LD_LIBRARY_PATH tylko dla binariów a.out. Starsze wersje ld-linux.so.1 wspierały
także LD_ELF_LIBRARY_PATH.
LD_AOUT_PRELOAD
(libc5) Wersja LD_PRELOAD tylko dla binariów a.out. Starsze wersje ld-linux.so.1 wspierały także
LD_ELF_PRELOAD.
LD_AUDIT
(glibc od wersji 2.4). Rozdzielona dwukropkami lista określonych przez użytkownika dzielonych
obiektów ELF do załadowania przez wszystkimi innymi obiektami w oddzielnej przestrzeni nazw
konsolidatora (to jest w przestrzeni nazw, która nie wpływa na przyporządkowania symboli, które
odbywa się w procesie). Bibliotek tych można użyć do audytu operacji konsolidatora dynamicznego.
LD_AUDIT jest ignorowane dla binarek z ustawionym bitem set-user-ID/set-group-ID.
Konsolidator dynamiczny powiadomi biblioteki audytu w tak zwanych punktach sprawdzeń audytu \m na
przykład ładowanie nowej biblioteki, rozwiązanie symbolu lub wywołanie symbolu z innego obiektu
dzielonego \m przez wywołanie odpowiedniej funkcji biblioteki audytu. Szczegóły można znaleźć w
rtld-audit(7). Interfejs audytu jest w dużej mierze zgodny z tym udostępnianym przez Solarisa,
opisanym w jego Przewodniku po konsolidatorze i bibliotekach w rozdziale Interfejs audytu
konsolidatora.
LD_BIND_NOT
(glibc od wersji 2.1.95) Nie aktualizuje GOT (global offset table) ani PLT (procedure linkage
table) po rozwinięciu symbolu.
LD_DEBUG
(glibc od wersji 2.1) Wypisuje rozwlekłe informacje debugowania konsolidatora dynamicznego. Jeśli
ustawione na all wypisuje wszystkie dostępne informacje debugowania, jeśli ustawione na help
wyświetla listę kategorii, które można podać jako wartość tej zmiennej środowiskowej. Od glibc
wersji 2.3.4 LD_DEBUG jest ignorowana dla binariów set-user-ID/set-group-ID.
LD_DEBUG_OUTPUT
(glibc od wersji 2.1) Plik, do którego będzie zapisane wyjście LD_DEBUG. Domyślnie jest to
standardowe wyjście błędów. LD_DEBUG_OUTPUT jest ignorowana dla binariów set-user-ID/set-group-ID.
LD_DYNAMIC_WEAK
(glibc od wersji 2.1.91) Pozwala na nadpisywanie słabych (ang. weak) symboli (przywracając
poprzednie zachowanie glibc). Ze względów bezpieczeństwa od wersji 2.3.4 biblioteki glibc
LD_DYNAMIC_WEAK jest ignorowane dla programów z ustawionym bitem set-user-ID/set-group-ID.
LD_HWCAP_MASK
(glibc od wersji 2.1) Maska właściwości sprzętowych.
LD_KEEPDIR
(tylko a.out)(libc5) Nie ignoruju katalogu w nazwach ładowanych bibliotek a.out. Używanie tej
opcji nie jest zalecane.
LD_NOWARN
(tylko a.out)(libc5) Powstrzymuje ostrzeżenia o bibliotekach a.out o niekompatybilnych numerach
minorowych wersji.
LD_ORIGIN_PATH
(glibc od wersji 2.1) Ścieżka, w której znaleziono program binarny (dla programów bez bitu
set-user-ID). Ze względów bezpieczeństwa od wersji 2.4 biblioteki glibc LD_ORIGIN_PATH jest
ignorowane dla binariów set-user-ID/set-group-ID.
LD_POINTER_GUARD
(glibc od wersji 2.4) Ustawione na 0 powoduje wyłączenie ochrony wskaźników. Jakakolwiek inna
wartość włącza ochronę wskaźników, co jest także zachowaniem domyślnym. Ochrona wskaźników jest
mechanizmem bezpieczeństwa, w którym niektóre wskaźnika do kodu przechowywanego w zapisywalnej
pamięci programu (adresy powrotu zwrócone przez setjmp(3) lub wskaźniki do funkcji używane przez
różne funkcje wewnętrzne biblioteki glibc) są w pseudolosowy zmieniane, aby utrudnić hakerowi
przejęcie tych wskaźników i przeprowadzenie ataków typu przepełnienie bufora lub stosu.
LD_PROFILE
(glibc od wersji 2.1) Nazwa (pojedynczego) obiektu dzielonego przeznaczonego do profilowania,
podane albo jako nazwa ścieżki, albo nazwa pliku so. Wyjście profilowania jest dopisywane do pliku
o nazwie "$LD_PROFILE_OUTPUT/$LD_PROFILE.profile".
LD_PROFILE_OUTPUT
(glibc od wersji 2.1) Katalog, w którym powinno być zapisane wyjście LD_PROFILE. Jeśli ta zmienna
nie jest zdefiniowana lub jeśli wartość tej zmiennej jest pusta, to domyślnym katalogiem jest
/var/tmp. LD_PROFILE_OUTPUT jest ignorowane dla programów set-user-ID i set-group-ID, które zawsze
używają /var/profile.
LD_SHOW_AUXV
(glibc od wersji 2.1) Wyświetla tablicę pomocniczą przekazaną przez jądro. Z powodów
bezpieczeństwa od wersji 2.3.5 biblioteki glibc LD_SHOW_AUXV jest ignorowana dla binariów
set-user-ID/set-group-ID.
LD_USE_LOAD_BIAS
Domyślnie (czyli jeśli ta zmienna nie jest zdefiniowana) programy wykonywalne i prekonsolidowane
obiekty dzielone będą uwzględniały adresy bazowe bibliotek, od których zależą, a
(nieprekonsolidowane) programy wykonywalne niezależne od pozycji (position-independent executable,
PIE) i inne obiekty dzielone nie będą ich uwzględniały. Jeśli LD_USE_LOAD_BIAS jest zdefiniowana z
jakąś wartością, to zarówno programy wykonywalne, jak i PIE, będą uwzględniały adresy bazowe.
Jeśli LD_USE_LOAD_BIAS jest zdefiniowane i ma wartość 0, to ani programy wykonywalne, ani PIE nie
będą uwzględniały adresów bazowych. Zmienna ta jest ignorowana przez programy set-user-ID i
set-group-ID.
LD_VERBOSE
(glibc od wersji 2.1). Jeśli ustawione na niepusty łańcuch znaków i jeśli została ustawiona
zmienna środowiskowa LD_TRACE_LOADED_OBJECTS, to wypisuje informacje o wersjonowaniu symboli
programu.
LD_WARN
(tylko ELF)(glibc od wersji 2.1.3) Jeśli ustawione na niepusty łańcuch znaków, to włącza
ostrzeganie o nierozwijalnych symbolach.
LDD_ARGV0
(libc5) argv[0] do użycia przez ldd(1), jeśli żadne argumenty nie są obecne.
PLIKI
/lib/ld.so
Dynamiczny konsolidator/ładowacz a.out
/lib/ld-linux.so.{1,2}
Dynamiczny konsolidator/ładowacz ELF
/etc/ld.so.cache
Plik zawierający skompilowaną listę katalogów, w których należy szukać bibliotek oraz
uporządkowaną listę bibliotek kandydujących.
/etc/ld.so.preload
Plik zawierający oddzieloną spacjami listę bibliotek dzielonych ELF, które mają być załadowane
przed programem.
lib*.so*
Biblioteki dzielone
UWAGI
Możliwości ld.so dostępne są tylko dla programów binarnych, skompilowanych przy użyciu libc w wersji
4.4.3 lub wyższej. Funkcjonalności ELF-a są dostępne od Linuksa 1.1.52 i libc5.
ZOBACZ TAKŻE
ldd(1), sprof(1), getauxval(3), rtld-audit(7), ldconfig(8), sln(8)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux man-pages. Opis projektu, informacje
dotyczące zgłaszania błędów, oraz najnowszą wersję oryginału można znaleźć pod adresem
http://www.kernel.org/doc/man-pages/.
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM)
<pborys@dione.ids.pl>, Grzegorz Goławski (PTM) <grzegol@pld.org.pl>, Robert Luberda <robert@debian.org> i
Michał Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.71 oryginału.
GNU 2014-07-08 LD.SO(8)