В общем случае компактность предпочтительнее repairDatabase. Но одно преимущество ремонта по сравнению с компактным - вы можете выполнить ремонт всего кластера. компактный, вам нужно входить в каждый осколок, что раздражает.
Очень возможно иметь несколько версий 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
будет "
Если вы внимательно посмотрите на второй вывод, вы увидите, что используется новое расположение для библиотек. Возможно, все еще отсутствуют библиотеки, которые являются частью glibc.
Я также думаю, что все библиотеки, используемые вашей программой, должны быть скомпилированы для этой версии glibc. Если у вас есть доступ к исходному коду программы, новая компиляция будет лучшим решением.
Использовать LD_PRELOAD: поместите свою библиотеку где-нибудь из каталогов man lib и запустите:
LD_PRELOAD='mylibc.so anotherlib.so' program
См .: статья в Википедии