我正在尝试运行动态可执行文件(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内核不兼容。