=== ldd ===
ldd - выдаёт список зависимостей от общих объектов
=== СИНТАКСИС ===
ldd [параметр]… файл…
=== ОПИСАНИЕ ===
Программа **ldd** выдаёт список общих объектов (общих библиотек), которые требуются для каждой из заданных в командной строке программы или общего объекта. Пример использования и результат работы:
$ 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)
Обычно, **ldd** вызывает стандартный динамический компоновщик (смотрите ld.so(8)), установив значение переменной окружения **LD_TRACE_LOADED_OBJECTS** в 1. Это заставляет компоновщик просмотреть динамические зависимости программы и найти (согласно правилам, описанным в **ld.so**(8)) и загрузить объекты, удовлетворяющие этим зависимостям. Для каждой зависимости **ldd** показывает расположение подошедшего объекта и адрес (шестнадцатеричный) загрузки (общие зависимости **linux-vdso** и **ld-linux** являются специальными; смотрите **vdso**(7) и **ld.so**(8)).
=== Безопасность ===
Be aware that in some circumstances (e.g., where the program specifies an ELF interpreter other than ld-linux.so), some versions of ldd may attempt to obtain the dependency information by attempting to directly execute the program, which may lead to the execution of whatever code is defined in the program's ELF interpreter, and perhaps to execution of the program itself. (Before glibc 2.27, the upstream ldd implementation did this for example, although most distributions provided a modified version that did not.)
Поэтому никогда не запускайте **ldd** для не доверенных исполняемых файлов, так как это может привести к выполнению произвольного кода. Безопасной альтернативой при работе с не доверенными исполняемыми файлами является команда:
$ objdump -p /путь/к/программе | grep NEEDED
Однако заметим, что эта альтернатива показывает только непосредственные зависимости исполняемого файла, а **ldd** показывает всё его дерево зависимостей.
=== ПАРАМЕТРЫ ===
--version
Выдать номер версии ldd.
-v, --verbose
Выдать всю информацию, включая, например, информацию о версии символов.
-u, --unused
Выдать неиспользуемые явные зависимости. (Начиная с glibc 2.3.4.)
-d, --data-relocs
Выполнить перемещения и показать все отсутствующие объекты (только для ELF).
-r, --function-relocs
Выполнить перемещения и для объектов данных и для функций, и показать все
отсутствующие объекты или функции (только для ELF).
--help Выдать справку по использованию.
=== ДЕФЕКТЫ ===
ldd не работает с динамическими библиотеками в формате a.out.
ldd не работает с некоторыми очень старыми a.out программами, которые были скомпилированы
до добавления поддержки ldd в компиляторы. Если вы используете ldd для одной из таких
программ, то будет предпринята попытка выполнить программу с argc = 0, и результаты будут
непредсказуемы.
=== СМ. ТАКЖЕ ===
pldd(1), sprof(1), ld.so(8), ldconfig(8)