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.