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.

GNU                                                2014-07-08                                           LD.SO(8)