Skip to main content

Найти общие библиотеки программы С помощью команды «ldd»

Siri Shortcuts/Команды - Примеры использования (Июнь 2026)

Siri Shortcuts/Команды - Примеры использования (Июнь 2026)
Anonim

Использовать LDD для отображения разделяемых библиотек, требуемых какой-либо конкретной программой, - полезной для разработки, когда есть недостающая зависимость. Команда также содержит список отсутствующих функций и объектов.

Командный синтаксис ldd

Соблюдайте правильный синтаксис команды ldd, чтобы избежать ошибок:

ldd OPTION … FILE …

Используйте один или несколько доступных переключателей командной строки ldd, вставленных в КЛЮЧ в приведенной выше команде:

--help | распечатать эту справку и выйти --version | распечатать информацию о версии и выйти -d, --data-relocs | перераспределение данных процесса -r, --function-relocs | данные процесса и перемещение функций -u, --unused | печать неиспользуемых прямых зависимостей -v, --verbose | распечатать всю информацию

Как использовать команду ldd

Выполните следующую команду, чтобы получить дополнительную информацию о программе:

$ ldd -v / path / to / program / executable

На выходе отображаются сведения о версии, а также пути и адреса для разделяемых библиотек, например:

$ ldd libshared.so linux-vdso.so.1 => (0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)

Если SO-файл вообще не существует, вы можете найти недостающие библиотеки, используя следующую команду:

$ ldd -d path / to / program

Результат аналогичен следующему:

linux-vdso.so.1 (0x00007ffc2936b000) /home/gary/demo/garylib.so => ​​not foundlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000) /lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)

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

$ objdump -p / path / to / program | НЕОБХОДИМО

Как найти путь к приложению

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

Например, так вы найдете путь к Firefox:

$ find / -name firefox

Однако проблема с командой find заключается в том, что она будет не только перечислять исполняемый файл, но и везде, где расположен Firefox, например:

  • /etc/skel/.mozilla/firefox
  • / Главная // кэш / Mozilla / Firefox
  • /home//.mozilla/firefox
  • / USR / бен / Firefox
  • / USR / Lib / Firefox
  • / USR / Lib / Firefox / Firefox

Этот подход немного перегружен, и вам может понадобиться использовать команду sudo для повышения ваших привилегий, иначе вы, вероятно, получите много ошибок, связанных с разрешением.

Вместо этого гораздо проще использовать команду whereis для поиска пути приложения:

$ whereis firefox

На этот раз вывод может выглядеть так:

/ USR / бен / светлячок

/ И т.д. / светлячок

/ USR / Библиотека / светлячок

Все, что вам нужно сделать, чтобы найти общие библиотеки для Firefox, введите следующую команду:

$ ldd / usr / bin / firefox

Результат команды будет примерно таким:

linux-vdso.so.1 (0x00007ffff8364000)libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)libstdc ++. so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000)libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000)libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000)libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000)/lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)

Linux-vdso.so.1 - это имя библиотеки, а шестнадцатеричный номер - это адрес, в который будет загружаться библиотека в память.

Вы заметите на многих других строках, что за символом => следует путь. Это путь к физическому двоичному; шестнадцатеричный номер - это адрес, в который будет загружена библиотека.