Provided by: manpages-pl_0.6-2_all bug

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.