39

Я знаю, что есть команда, которая перечисляет мне библиотеки и соответствующие версии, с которыми было связано программное обеспечение.

Что-то с ld или libtool?

Но я просто не могу вспомнить. Потратил некоторое время на Google, но не нашел ничего полезного.

Обновить
ldd <binary> поможет в linux (от @ Ernelli), в то время как я обнаружил, что otool -L <binary> делает нечто похожее на MacOS X.

3 ответа3

39

Попробуй ldd binary-exec

Пример:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)
14

Чтобы найти то, что ему нужно напрямую:

readelf -d APP | grep NEEDED

ldd как упоминалось в другом месте, покажет все прямые и косвенные библиотеки - все, что нужно во время выполнения. Это может быть не полный список, так как вы можете динамически открывать вещи с помощью dlopen(), но это должно работать в 99% случаев.

ld и libtool используются во время компиляции / компоновки. Они бесполезны, когда у вас есть приложение.

РЕДАКТИРОВАТЬ Я вижу по последующим ответам, которые вы спрашивали о OSX, но я хочу добавить к своему ответу об инструментах Linux:

Я забыл упомянуть одну вещь, довольно давно; Вы спрашивали о версиях. Ни ldd ни readelf не ответят на вопрос "какая версия". Они сообщат вам имя файла библиотеки, которую вы ищете, и соглашение об именах может иметь некоторую информацию о версии, но это никак не навязывается. Символы могут быть версионными, и вам потребуется гораздо более низкий уровень с nm чтобы увидеть их,

8

Другой способ - использовать objdump.

objdump -x "двоичный" | ГРЕП НУЖЕН

Это показывает все необходимые зависимости только для этого двоичного файла. Очень полезно.

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