在我的glibc版本中,ld-linux的segfault

运行Ubuntu 10.04

$ uname -a Linux minion 2.6.32-36-generic-pae #79-Ubuntu SMP Tue Nov 8 23:25:26 UTC 2011 i686 GNU/Linux 

下载源代码并执行以下操作:

 CFLAGS="-O2 -U_FORTIFY_SOURCE -fno-stack-protector" '/home/user/Desktop/eglibc-2.11.1/configure' --prefix='/home/user/Desktop/eglibc_pristinebuild' make -j4 export LD_LIBRARY_PATH=/lib/tls/i686/cmov:/lib:/usr/lib 

这工作:

 $ ./elf/ld-linux.so.2 /bin/ls /usr bin games include lib lib64 local sbin share src 

这失败了:

 $ ./elf/ld-linux.so.2 /bin/true Segmentation fault 

但是这个工作:

 /lib/ld-linux.so.2 /bin/true 

Falsegrepcat以及其他所有我在/bin segfault中以相同方式尝试过的东西。 源代码有问题吗? 我编译不正确?

另外值得注意的是,我为树莓派(ARM)下载了正确的版本(稍微更新),编译了它,并且没有段错误。

这失败了:

 $ ./elf/ld-linux.so.2 /bin/true Segmentation fault 

这完全是预期的结果。

GLIBC由〜200个独立的文件组成,它们必须完全匹配(必须来自同一个版本),因为它们之间使用了未版本化的二进制接口。

运行./elf/ld-linux.so.2 /bin/true ,您正在使用自己的ld-linux版本,但是系统版本的libc.so.6不是来自您的版本。

你可以通过使用以下来确认事实:

 LD_DEBUG=files,libs ./elf/ld-linux.so.2 /bin/true 

(这将证明正在使用/lib/libc.so.6 )。

你可以通过使用例如

 ./elf/ld-linux.so.2 --library-path . /bin/true 

然后使用./libc.so.6