Иногда необходимо на системе с glibc 2.2 запустить программу, собранную с glibc 2.3. Если бы вместо glibc была практически любая другая библиотека - можно было бы взять где-нибудь нужную ее версию и поставить рядом с имеющейся. Проблем обычно не бывает. Но в случае с glibc так сделать не удастся, ведь это самая главная системная библиотека, и нескольких ее версий в системе быть не может. А поставить новую версию вместо старой не удастся - не сможет запуститься ни одна программа, требующая старую версию.
Безусловно, лучшим решением проблемы является пересборка необходимой программы под имеющуюся версию glibc. Но если этого сделать нельзя - придется запускать программу особым образом. Итак, сначала нам надо где-то взять собственно glibc 2.3. Затем мы кладем ее файлы в какую-нибудь папку, например, в папку lib в своей домашней директории. Тогда запускать требующую glibc 2.3 программу придется так:
$ LD_LIBRARY_PATH=~/lib ~/lib/ld-linux.so.2 /usr/local/bin/myprog
Здесь сначала устанавливается переменная окружения LD_LIBRARY_PATH=~/lib, которая говорит, что библиотеки должны искаться в папке ~/lib (если вы положили их в другое место - поменяйте путь). Затем запускается динамический загрузчик ld-linux.so.2, который загружает программу myprog вместе с необходимыми ей библиотеками.
Технические подробности:
При обычном запуске любой программы система незаметно для пользователя запускает системный /lib/ld-linux.so.2, загружающий все библиотеки. Можно запускать его и самому:
$ /lib/ld-linux.so.2 /bin/ls /
bin boot dev etc home lib mnt opt proc root sbin sys tmp usr var
В данном случае неважно, был ли ld-linux.so.2 указан при запуске программы - система и так знает, что запускать его надо из /lib (точнее, это записано в самом файле /bin/ls). Но если мы используем нестандартную (т.е. отличную от установленной в /lib) версию glibc, мы должны использовать соответствующую версию ld-linux.so.2. Для этого и приходится указывать путь к нему вручную.