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

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

Синтаксис команды ldd

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

ldd [ОПЦИЯ] ... ФАЙЛ ...

Используйте один или несколько доступных переключателей команды ldd, вставленных в область [OPTION] в приведенной выше команде:

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

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

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

$ ldd -v / path / to / program / исполняемый

Выходные данные показывают информацию о версии, а также пути и адреса к общим библиотекам, например:

$ 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 путь / к / программе

Вывод похож на следующее:

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 — это имя библиотеки, а шестнадцатеричный номер — это адрес, куда библиотека будет загружена в память.

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

Ссылка на основную публикацию