Я пытаюсь запустить динамический исполняемый файл (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)
Поскольку libc в системе в версии 2.12 и слишком стар для моего двоичного файла.
Я скопировал версию 2.27 libc, которая будет работать с этим конкретным двоичным файлом.Если я пытаюсь запустить его с помощью 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.