I am trying to run a dynamic executable (xxx) but I am getting the following error:
$ ./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)
As the libc in the system in version 2.12 and is too old for my binary.
I have copied version 2.27 of libc which would work with this particular binary. If I try to run it using 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)
The system is a RedHat 6 server:
$ 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
The same steps work instead on my Ubuntu 18.10 machine. Why am I prevented from proloading my own libc? Also, why couldn't ld.so provide a more comprehensive explanation as of why my libc cannot be preloaded?
I might add that the following fails:
$ /lib64/ld-linux-x86-64.so.2 ./libc.so.6
Segmentation fault (core dumped)
So I am guessing the binary I am using is likely incompatible with the RedHat kernel somehow.