Разрешение зависимостей в Linux - PullRequest
8 голосов
/ 13 июля 2009

В Windows я использовал программу, называемую средство обхода зависимостей, для проверки библиотек, которые использует приложение. Мне было интересно, как я могу добиться этого в Linux для стандартного двоичного файла:

ELF 32-битный исполняемый файл LSB, Intel 80386, версия 1 (SYSV), динамически связанный (использует общие библиотеки), для GNU / Linux 2.6.0, раздетый

Спасибо.

Ответы [ 4 ]

14 голосов
/ 13 июля 2009

Попробуйте:

ldd executable

Например:

[me@somebox ~]$ ldd /bin/ls
        linux-gate.so.1 =>  (0xb7f57000)
        librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f4c000)
        libselinux.so.1 => /lib/libselinux.so.1 (0xb7f32000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7f2b000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7ddc000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7dc4000)
        /lib/ld-linux.so.2 (0xb7f58000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7dc0000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7dbb000)
[me@somebox ~]$ 

Обратите внимание, что это будет сообщать только о совместно используемых библиотеках. Если вам нужно выяснить, какие статические библиотеки были связаны во время компиляции, это немного сложнее, особенно если учесть, что ваш исполняемый файл «раздет» (без символов отладки).

5 голосов
/ 13 июля 2009

Использование ldd

ldd /bin/sh
3 голосов
/ 13 июля 2009

Если вы хотите что-то немного менее грубое, чем итеративный вызов ldd, и несколько более похожее на MSVC, попробуйте Visual-ldd . Он не обновлялся в течение 4 лет, но все равно должен работать, учитывая, что формат ELF не изменился. Он по-прежнему не будет отображать отдельные символы внутри этих библиотек - для этого вам понадобится что-то вроде nm , и я, к сожалению, не знаю никакой оболочки GUI для этого.

1 голос
/ 13 июля 2009

Используйте ldd . Он покажет динамические библиотеки, в которых нуждается бинарный файл.

Обратите внимание, что самим библиотекам, в свою очередь, может понадобиться больше библиотек. Чтобы получить их, вы можете запустить ldd в библиотеках, которые вы получили при запуске ldd в двоичном файле.

...