ldd(1)

NAZWA
ldd - wyświetla zależności od obiektów dzielonych

SKŁADNIA
ldd [opcja ...] plik ...

OPIS
ldd wyświetla obiekty dzielone (biblioteki dzielone) wymagane przez każdy program lub obiekt dzielony podany w linii poleceń. Poniżej pokazano przykład użycia i wyniku działania programu:

    $ ldd /bin/ls;
        linux-vdso.so.1 (0x00007ffcc3563000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000)
        /lib64/ld-linux-x86-64.so.2 (0x00005574bf12e000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)

Zwyczajowo ldd uruchamia standardowy konsolidator dynamiczny (patrz ld.so(8) ze zmienną środowiska LD_TRACE_LOADED_OBJECTS ustawioną na 1. Powoduje to sprawdzenie przez dynamicznego konsolidatora dynamicznych zależności programu oraz odnalezienie (zgodnie z regułami opisanymi w ld.so(8)) i załadowanie obiektów spełniających te zależności. W przypadku każdej zależności, ldd wypisze położenie pasującego obiektu i (szesnastkowy) adres, pod którym go załadowano (zależności dzielone linux-vdso i ld-linux są specjalne; zob. vdso(7) i ld.so(8)).

  BEZPIECZEŃSTWO
Należy mieć świadomość, że w niektórych sytuacjach (np. gdy program poda intepretator ELF inny niż ld-linux.so), niektóre wersje ldd mogą próbować uzyskać informacje o zależnościach, uruchamiając program bezpośrednio, co może spowodować wykonanie dowolnego kodu zdefiniowanego w interpretatorze ELF programu i, być może, wykonanie samego programu (przed glibc 2.27 dokonywała tego np. implementacja ldd od dostawcy, choć większość dystrybucji zapewniała zmodyfikowaną wersję, która tego nie czyniła).

Dlatego nigdy nie powinno się używać ldd z niezaufanym programem wykonywalnym, ponieważ może to owocować wykonaniem dowolnego kodu. Bezpieczniejsza alternatywa radzenia sobie z niezaufanymi programami wykonywalnymi to:

    $ objdump -p /ścieżka/do/programu | grep NEEDED;

Proszę zauważyć, że w ten sposób uzyskuje się jedynie bezpośrednie zależności pliku wykonywalnego, natomiast ldd pokazuje jego całe drzewo zależności.

OPCJE

--version
    Wypisuje numer wersji ldd.

--verbose
-v
    Wypisuje wszystkie informacje, włączając to na przykład informacje o wersjach symboli.

--unused
-u
    Wypisuje nieużywane bezpośrednie zależności (od glibc 2.3.4).

--data-relocs
-d
    Dokonuje relokacji i zgłasza wszelkie brakujące funkcje (tylko ELF).

--function-relocs
-r
    Dokonuje relokacji zarówno dla obiektów danych, jak i funkcji i zgłasza listę nieobecnych obiektów lub funkcji (tylko ELF).

--help
    Informacje o użyciu programu.

USTERKI
ldd nie działa na bibliotekach współdzielonych a.out.

ldd nie zadziała z bardzo starymi programami a.out, które zostały skonsolidowane zanim dodano do kompilatora obsługę ldd. Jeśli użyje się ldd na jednym z tych programów, to program będzie uruchomiony z argc = 0, a wyniki tego będą nieprzewidywalne.

ZOBACZ TAKŻE
pldd(1), sprof(1), ld.so(8), ldconfig(8)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.