ошибка при загрузке разделяемых библиотек: libc.so.6: невозможно открыть файл общих объектов

У меня есть ядро ​​Linux, и я chroot его на /var/chroot :

Я добавил зависимости bash следующим образом:

 ldd /bin/bash linux-vdso.so.1 => (0x00007fff9a373000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f24d57af000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f24d55ab000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f24d51eb000) /lib64/ld-linux-x86-64.so.2 (0x00007f24d59f8000) 

Затем я сделал:

 # cd /var/chroot/ # mkdir bin/ lib64/ lib/ # cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/ # cp /lib/x86_64-linux-gnu/libdl.so.2 lib/ # cp /lib/x86_64-linux-gnu/libc.so.6 lib/ # cp /lib64/ld-linux-x86-64.so.2 lib64/ # cp /bin/bash bin/ 

после этого:

 # chroot /var/chroot 

После этого я скопировал /bin/ls и библиотеки, показанные ldd ls . Но когда я запустил ls меня есть следующая ошибка:

 ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32 

3 Solutions collect form web for “ошибка при загрузке разделяемых библиотек: libc.so.6: невозможно открыть файл общих объектов”

Поскольку вы, по-видимому, могли запустить bash, у вас есть основы: вам нужно скопировать все библиотеки, перечисленные командой ldd /bin/command в каталог на пути загрузки библиотеки , а также сам загрузчик ( /lib64/ld-linux-x86-64.so.2 ), который должен находиться в месте, жестко закодированном в исполняемых файлах.

Если вы получите ошибку

 error while loading shared libraries: libc.so.6: cannot open shared object file 

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

Если вы получите ошибку

 ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32 

то вы скопировали библиотеку за неправильную архитектуру – вы должны скопировать 32-разрядный libpthread.so.0 , но вы используете 64-битную библиотеку.

Если у вас возникнут дополнительные проблемы, это может помочь выяснить, где именно загрузчик пытается найти библиотеки. Поместите двоичный файл strace в chroot (либо статически скомпилированный, либо динамически скомпилированный, плюс все библиотеки, в которых он нуждается), и запустите chroot ls и посмотрите, что именно происходит. Или запустите strace chroot ls чтобы использовать двоичный файл strace который находится вне chroot.

Осторожный. Файлы общей библиотеки обычно символически связаны. Таким образом, текущая версия может быть изменена, и все установленные приложения могут ее найти. Например, в моей системе:

 ls -l /usr/lib/libc.so.6 lrwxrwxrwx 1 root root 12 dec 27 03:13 /usr/lib/libc.so.6 -> libc-2.20.so* 

Таким образом, libc.so.6 фактически указывает на текущую версию libc, и когда я обновляю систему, она укажет на новую версию, что бы она ни была. Есть часто несколько уровней связи.

Вам нужно скопировать фактические библиотеки, а не только ссылки.

пытаться

 mkdir lib/x86_64-linux-gnu cp /lib/x86_64-linux-gnu/libtinfo.so.5 /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu 

Если вы хотите использовать команды типа ls, вам также нужно ldd /bin/ls и скопировать библиотечный файл.

Кстати, cp скопирует содержимое символической ссылки.

Interesting Posts

Ubuntu – блокирует доступ в Интернет для всех приложений, за исключением избранных

Debian: сохранить пользовательские изменения в initscript

Синтаксис командной строки синтаксиса в интерпретационных правилах?

Заменить второе появление между двоеточием и скобкой

Есть ли способ иметь NPTv6 с отслеживанием соединений в Linux?

В чем смысл sudo sudo?

Как получить scapy, чтобы нюхать на правильном интерфейсе?

Маршрутизировать трафик VPN-шлюза через tun0 вместо обычного шлюза

`$ RANDOM` не является случайным в` “ “ “ `Exec“` “ “ “ “ “ “ `

Grep вся строка, которая не начинается с числа (ей)

Как установить bash_logout для всех пользователей?

Как я могу добавить комментарий в список установки yum?

Можно ли перемещать содержимое экрана?

Отключение мнемоники в строке меню при сохранении кнопочной мнемоники в GTK2

Как я могу использовать chroot в дистрибутиве Live filesystem.squashfs Linux?

Linux и Unix - лучшая ОС в мире.