为什么我不能预载我自己的libc.so.6来运行动态可执行文件

时间:2018-09-13 18:24:48

标签: linker-errors

我正在尝试运行动态可执行文件(xxx),但出现以下错误:

$ ./xxx
./xxx: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./xxx)
./xxx: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by ./xxx)

作为2.12版系统中的libc,对于我的二进制文件来说太旧了。

我复制了libc的2.27版本,该版本可以与此特定的二进制文件一起使用。如果我尝试使用LD_PRELOAD来运行它:

$ LD_PRELOAD="./libc.so.6" ./xxx
ERROR: ld.so: object './libc.so.6' from LD_PRELOAD cannot be preloaded: ignored.
./xxx: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./xxx)
./xxx: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by ./xxx)

系统是RedHat 6服务器:

$ uname -a
Linux platinum 2.6.32-754.3.5.el6.x86_64 #1 SMP Thu Aug 9 11:56:22 EDT 2018 x86_64 GNU/Linux

相同的步骤适用于我的Ubuntu 18.10计算机。为什么我无法加载自己的libc?另外,为什么ld.so无法提供关于为什么我的libc无法预加载的更全面的解释?

我可能会补充说以下内容会失败:

$ /lib64/ld-linux-x86-64.so.2 ./libc.so.6 
Segmentation fault (core dumped)

所以我猜我正在使用的二进制文件可能与RedHat内核不兼容。

0 个答案:

没有答案