LDD начал показывать мне "не динамический исполняемый файл"

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

  • Установил g++5 для старого porject (уже удален)
  • удачный автоочистка
  • удален кеш ldconfig (думаю, причина в этом)

Теперь я не могу запустить некоторые приложения. Ldd говорит мне, что это "не динамический исполняемый файл"

igor@Linbox:/lib/i386-linux-gnu$ ldd libssl.so.1.0.0 
    is not a dynamic executable

igor@Linbox:/lib/i386-linux-gnu$ ldd libselinux.so.1 
    is not a dynamic executable

igor@Linbox:/bin$ ldd dd 
    linux-vdso.so.1 =>  (0x00007fff0b380000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb618c76000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb619269000)           

igor@Linbox:/lib/x86_64-linux-gnu$ ldd libc.so.6 
    /lib64/ld-linux-x86-64.so.2 (0x00007fcb44373000)
    linux-vdso.so.1 =>  (0x00007ffed8f33000)

Версия: Linux Linbox 4.13.0-46-generiC#51-Ubuntu SMP Вт 12 июня 12:36:29 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Также я проверил, что это все еще присутствует:

// for running x32 applications on x64 system
sudo dpkg --add-architecture i386
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

Так как удалено ld.so.cache я сделал sudo ldconfig, Есть новый кеш в /etc/ld.so.cache

Я скучаю по какой-то библиотеке?

Добавлены проверки файлов:

file /lib/i386-linux-gnu/libssl.so.1.0.0
/lib/i386-linux-gnu/libssl.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=c1e3854cb8b86f1006dc391d23f102ea1184cf25, stripped
file /lib/i386-linux-gnu/libselinux.so.1
/lib/i386-linux-gnu/libselinux.so.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=396cda857e41036061599a59c9f5fe62d7b50c4d, stripped
dpkg -S /lib/i386-linux-gnu/libssl.so.1.0.0
libssl1.0.0:i386: /lib/i386-linux-gnu/libssl.so.1.0.0
dpkg -S /lib/i386-linux-gnu/libselinux.so.1
libselinux1:i386: /lib/i386-linux-gnu/libselinux.so.1

Проверено libx32 из комментариев:

igor@Linbox:/lib/i386-linux-gnu$ ls -l /libx32/ld*
-rwxr-xr-x 1 root root 155092 Jan 12  2018 /libx32/ld-2.26.so
lrwxrwxrwx 1 root root     10 Jan 12  2018 /libx32/ld-linux-x32.so.2 -> ld-2.26.so

4 ответа

Решение

Я решил проблему (thx to ubfan1), обновив ядро ​​с 4.13.0-46-generic вплоть до 4.15.0-39-generic:

$ uname -a
Linux Linbox 4.15.0-39-generic #42-Ubuntu SMP Tue Oct 23 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:   bionic

/lib/i386-linux-gnu$ ldd libselinux.so.1 
    linux-gate.so.1 (0xf7fca000)
    libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xf7ee6000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7ee1000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7d05000)
    /lib/ld-linux.so.2 (0xf7fcc000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7ce6000)

Ошибка 1616609, ldd неправильно сообщает "не динамический исполняемый файл", когда загрузчик исполняемого файла отсутствует, вероятно, является причиной проблемы (как предложил Steeldriver). Переустановите пакет libc6-x32, чтобы получить его обратно. Не забудьте добавить себя в баг, возможно, он когда-нибудь будет исправлен - даже предложат патч.

Так что это сработало для меня. ldd — это скрипт. В верхней части (строка 29 на моей руке Debian 10) он основывает поиск всей библиотеки на RTLDLIST=/lib/ld-linux-aarch64.so.1. После установки 32-битных библиотек для рук (dpkg --add-architecture armhf; apt update и т. д.) я заглянул в /lib и увидел ld-linux-armhf.so.3 рядом с ld-linux-aarch64.so.1. Итак, это остановило ldd, говорящее «не динамический исполняемый файл»:

  1. скопируйте /usr/bin/ldd в /usr/bin/ldd32
  2. отредактировать /usr/bin/ldd32
  3. замените RTLDLIST=/lib/ld-linux-aarch64.so.1 на RTLDLIST=/lib/ld-linux-armhf.so.3
  4. ldd32 <32-битный двоичный файл>

Проблема возникает из-за того, что ваши исполняемые файлы glibc исходят из неправильной версии glibc. Ваша система ведет себя как 32-битная, если последняя glibc 32-битная. Так что, если вы хотите 64-битную систему с поддержкой 32-бит, после установки 32-битных библиотек вы должны переустановить 64-битную glibc.

Другие вопросы по тегам