libc.so.2是否需要位于/ usr / lib中?

时间:2014-10-05 17:36:01

标签: linux archlinux libc chroot

我有一个包含以下内容的目录:

bin/busybox
lib/ld-linux.so.2
lib/libc.so.6

当我调用时:

chroot . bin/busybox sh

它失败并带有以下内容:

/bin/busybox: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

当我将lib / libc.so.6移动到usr / lib时,它可以正常工作。

为什么libc必须在/ usr / lib中?当我调用时:

objcdump -p bin/busybox | grep NEEDED

我明白了:

NEEDED        libc.so.6

所以我想,因为只使用了库的soname而没有斜线等,所加载的将能够在标准文件夹中找到它,即/ lib和/ usr / lib。显然,事实并非如此。

更令人困惑的是,ld-linux.so.2似乎必须在/ lib中,因为当它被移动到/ usr / lib时,chroot会失败:

chroot: failed to run command '/bin/busybox': No such file or directory
我学到的

实际上是一个错误,无法找到加载器,而不是busybox二进制文件。

libc.so.2发行版的问题是否具体?如果这很重要,我正在使用Arch Linux。

1 个答案:

答案 0 :(得分:3)

加载器的位置(通常类似于/lib/ld-linux.so)在二进制文件中是硬编码的。此组件没有搜索过程 - 如果找不到,则二进制文件根本不会运行。

(确切的路径取决于您正在使用的libc和架构。例如,它位于x /lib64/ld-linux-x86-64.so.2上的glibc上。)

将在/etc/ld.so.conf中配置要搜索动态库的位置。但是,如果您没有在chroot中拥有该文件,则可能无法配置某些标准路径!