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