6

Команда Linux ldd может отображать динамические библиотеки, используемые исполняемым файлом. Это скрипт bash. Но он кажется хрупким и не работает на некоторых двоичных файлах. Есть ли альтернативный инструмент?

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

% file datab2txt

datab2txt: статически связанный ELF 64-битный исполняемый файл LSB, x86-64, версия 1 (SYSV), для GNU/Linux 2.4.0, не удален

но ldd не работает с:

% ldd -v datab2txt

не динамический исполняемый файл

2 ответа2

9

Вы также можете сделать:

readelf -d executable | grep NEEDED

Но это, вероятно, не делает то, что вы хотите. Он показывает библиотеки, на которые ссылается executable , но не все библиотеки, в которых он нуждается (библиотеке может потребоваться другая библиотека).

6

Вывод file говорит « статически связаны ». ldd работает только с динамически связанными исполняемыми файлами.

(Технически, все, что делает Linux ldd , это вызывает исполняемый загрузчик Linux, /lib/ld-linux.so.2 , после установки переменной окружения. Так что это должен быть самый надежный способ.)

Некоторые программы могут использовать dlopen() для загрузки библиотек во избежание зависимости программы от них. Например, Glibc загружает библиотеки NSS таким образом, потому что их имена известны только во время выполнения, а не во время компиляции / компоновки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .