Libraries
載入共享庫時出錯: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
由於您顯然能夠啟動 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-bit
libpthread.so.0
,但你正在執行一個 64-bit 庫。如果您還有其他問題,可能有助於找出載入程序嘗試查找庫的確切位置。將
strace
二進製文件放入 chroot(靜態編譯的,或者動態編譯的加上它需要的所有庫),然後執行chroot ls
並查看到底是什麼失敗了。或者執行strace chroot ls
以使用strace
chroot 之外的二進製文件。