Подтвердить что ты не робот

Ldd не работает с динамически связанным двоичным кодом

У меня есть двоичный файл, который использует кучу .so файлов.

bash-3.00$ file foo
foo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.21, dynamically linked (uses shared libs), not stripped

Но если я запустил ldd в этом файле, он не смог забрать файлы .so, на которые зависит двоичный файл. '

bash-3.00$ ldd foo
        not a dynamic executable
bash-3.00$

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

bash-3.00$ readelf -d  foo
Dynamic segment at offset 0x17c810 contains 70 entries:

  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libdl.so.2]

Почему ldd не может выбрать зависимости библиотеки в этом случае?

4b9b3361

Ответ 1

Как и в одном из комментариев, вы пытались использовать ldd на 64-битной системе для проверки 32-разрядного объекта ELF. ldd использует стандартный динамический компоновщик для отслеживания зависимостей, поэтому, если ваша платформа не имеет линкера, требуемого проверяемым объектом ELF, ldd терпит неудачу. Readelf и objdump более надежны в этих ситуациях.

Ответ 2

Обратите внимание, что в Fedora 21 для получения ldd для идентификации 32-битных файлов .so мне пришлось установить следующее:

sudo yum install glibc.i686 libgcc.i686 libstdc++.i686 glibc-devel.i686

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