Очень возможно иметь несколько версий glibc в одной и той же системе (мы делаем это каждый день).
Однако вам нужно знать, что glibc состоит из множества частей (200 + разделяемых библиотек) которые все должны совпадать. Одна из частей - ld-linux.so.2, а должна соответствовать libc.so.6, или вы увидите ошибки, которые видите.
Абсолютный путь к ld-linux.so.2 жестко закодирован в исполняемый файл во время соединения и не может быть легко изменен после завершения связи.
Чтобы создать исполняемый файл, который будет работать с новым glibc , сделайте следующее:
g++ main.o -o myapp ... \
-Wl,--rpath=/path/to/newglibc \
-Wl,--dynamic-linker=/path/to/newglibc/ld-linux.so.2
Опция компоновщика -rpath
сделает загрузчик времени выполнения для поиска библиотек в /path/to/newglibc
(так что вам не нужно было бы устанавливать LD_LIBRARY_PATH
перед запуском), и параметр -dynamic-linker
будет «испечь» путь, чтобы исправить ld-linux.so.2
в приложении.
Если вы не можете повторно подключить приложение myapp
(например, потому что это сторонний двоичный файл), не все потеряно, но становится сложнее. Одно из решений - установить для него подходящую среду chroot
. Другая возможность - использовать rtldi и двоичный редактор .