Команда ldd обрабатывает зависимости зависимостей, а это не то, что мне нужно.
Свободный антилоп гну
11
Для меня это работает нормально. И он даже говорит вам, какую из библиотек можно и нельзя найти.
Филипп Ф
2
ldd не будет работать с исполняемым файлом - это полезно только для выяснения зависимостей разделяемых библиотек.
Tuxdude
2
Tuxdude, почему ты так думаешь? В чем причина непригодности ldd для исполняемых файлов ELF?
Виталий Исаев
Это прекрасно для копирования необходимых общих библиотек с компьютера разработчика в архив развертывания.
Томаш Зато - Восстановить Монику
30
objdumpИнструмент может сказать вам эту информацию. Если вы вызываете objdumpс -xопцией, чтобы получить его для вывода всех заголовков , то вы найдете общие зависимости объектов в самом начале в «Dynamic раздел».
Например, запуск objdump -x /usr/lib/libXpm.so.4в моей системе дает следующую информацию в «Динамическом разделе»:
Прямые зависимости общего объекта перечисляются как значения 'NEEDED'. Так что в приведенном выше примере libXpm.so.4на моей системе просто необходимо libX11.so.6и libc.so.6.
Важно отметить, что это не означает, что все символы, необходимые для передачи двоичного файла, objdumpбудут присутствовать в библиотеках, но это по крайней мере показывает, какие библиотеки загрузчик попытается загрузить при загрузке двоичного файла.
В чем разница между этим и objdump -x <binary> | grep "NEEDED"? Я имею в виду, что оба почти одинаковы, я просто получаю на один .soфайл больше, lddчем objdump. Но тот факт, что результаты не совпадают, заставляет задуматься, какой метод является более точным.
Ответы:
Вы можете использовать
readelf
для изучения заголовков ELF.readelf -d
перечислит прямые зависимости какNEEDED
разделы.источник
Если вы хотите найти зависимости рекурсивно (включая зависимости зависимостей, зависимости зависимостей зависимостей и т. Д.)…
Вы можете использовать
ldd
команду. ldd - вывести зависимости от общей библиотекиисточник
objdump
Инструмент может сказать вам эту информацию. Если вы вызываетеobjdump
с-x
опцией, чтобы получить его для вывода всех заголовков , то вы найдете общие зависимости объектов в самом начале в «Dynamic раздел».Например, запуск
objdump -x /usr/lib/libXpm.so.4
в моей системе дает следующую информацию в «Динамическом разделе»:Прямые зависимости общего объекта перечисляются как значения 'NEEDED'. Так что в приведенном выше примере
libXpm.so.4
на моей системе просто необходимоlibX11.so.6
иlibc.so.6
.Важно отметить, что это не означает, что все символы, необходимые для передачи двоичного файла,
objdump
будут присутствовать в библиотеках, но это по крайней мере показывает, какие библиотеки загрузчик попытается загрузить при загрузке двоичного файла.источник
ldd -v печатает дерево зависимостей в разделе «Информация о версии:». Первым блоком в этом разделе являются прямые зависимости двоичного файла.
См. Иерархический ldd (1)
источник
objdump -x <binary> | grep "NEEDED"
? Я имею в виду, что оба почти одинаковы, я просто получаю на один.so
файл больше,ldd
чемobjdump
. Но тот факт, что результаты не совпадают, заставляет задуматься, какой метод является более точным.