Команда Linux ldd

Linux 命令大全Энциклопедия команд Linux


ldd (список динамических зависимостей) — очень полезный инструмент командной строки в системах Linux, используемый для отображения динамических библиотек, от которых зависит программа или разделяемая библиотека. При запуске программы в Linux системе необходимо загрузить различные разделяемые библиотеки (файлы .so), от которых зависит программа; ldd — это инструмент, используемый для просмотра этих зависимостей.


Базовый синтаксис команды ldd

ldd [选项] 可执行文件或共享库

Общие опции и описание параметров

Опция Описание
-v Показать подробную информацию о версии
-u Показать неиспользуемые прямые зависимости
-d Выполнить перемещение и сообщить об отсутствующих функциях
-r Выполнить перемещение и сообщить об отсутствующих функциях и данных
--help Показать справочную информацию

Как работает команда ldd

ldd на самом деле — это скрипт, который запускает целевую программу, устанавливая специальные переменные окружения, так что программа отображает информацию о своих зависимых библиотеках при загрузке вместо обычного выполнения. В частности:

  1. Для исполняемых файлов формата ELF ldd анализирует их динамический сегмент.
  2. Он проверяет записи DT_NEEDED, чтобы определить необходимые разделяемые библиотеки.
  3. Он ищет эти файлы библиотек в системных путях к библиотекам.
  4. Он отображает полный путь и карту адресов памяти каждой библиотеки.

Примеры использования

Пример 1: Просмотр зависимостей простой программы

ldd /bin/ls

Типичный вывод:

linux-vdso.so.1 (0x00007ffd5a3f0000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f8e4a3b0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e4a1c0000)
libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f8e4a130000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e4a120000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8e4a400000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8e4a100000)

Пример 2: Проверка неиспользуемых прямых зависимостей

ldd -u /usr/bin/python3

Пример 3: Просмотр зависимостей в подробном режиме

ldd -v /usr/bin/gcc

Практические сценарии применения

Сценарий 1: Устранение ошибок "library not found"

Когда программа не может запуститься из-за отсутствующей библиотеки, ldd может помочь быстро определить проблему:

ldd ./my_program | grep "not found"

Сценарий 2: Проверка конфликтов версий библиотек

ldd -r ./my_program

Сценарий 3: Проверка правильности пути к библиотеке

ldd /path/to/your/executable | awk '{print $3}' | xargs ls -la

Примечания и распространённые проблемы

  1. Предупреждение по безопасности: Не используйте ldd для недоверенных исполняемых файлов, поскольку он фактически пытается выполнить части кода программы.

    • Альтернативы:objdump -p /path/to/program | grep NEEDED
  2. Статически скомпонованные программы: Для полностью статически скомпонованных программ ldd выведет "not a dynamic executable".

  3. Среды кросс-компиляции: В средах кросс-компиляции необходимо использовать инструмент ldd, соответствующий целевой платформе.

  4. Распространённые ошибки:

    • ldd: ./program: No such file or directory→ Возможно, это связано с отсутствующим интерпретатором или с тем, что сама программа не существует
    • ldd: exited with unknown exit code→ Программа может аварийно завершиться во время выполнения

Продвинутые советы

1. Используйте readelf для просмотра более детальной информации о зависимостях

readelf -d /path/to/program | grep NEEDED

2. Используйте переменную окружения LD_TRACE_LOADED_OBJECTS

LD_TRACE_LOADED_OBJECTS=1 /path/to/program

3. Проверьте дерево зависимостей библиотек

ldd /path/to/library.so | awk '{print $3}' | xargs ldd

Итог

ldd — незаменимый инструмент в администрировании Linux и отладке программ. Он позволяет:

  • Быстро отображать зависимости программы от динамических библиотек
  • Помогать решать проблемы отсутствующих библиотек или конфликтов версий
  • Проверять, полноценна ли среда выполнения программы
  • Помогать при упаковке и развёртывании программного обеспечения

Освоение использования команды ldd может значительно повысить вашу эффективность в решении проблем зависимостей в среде Linux.


Linux 命令大全Энциклопедия команд Linux

Другие расширения