У меня есть двоичный исполняемый файл с именем "альфа", который требует связанной библиотеки (libz.so.1.2.7), который находится на /home/username/myproduct/lib/libz.so.1.2.7
Я экспортирую то же самое в свой экземпляр терминала, прежде чем порождать мой двоичный исполняемый файл, выполнив следующую команду.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Теперь, когда я порождаю другое приложение "bravo", которое требует ту же библиотеку, но другой версии, т.е. (libz.so.1.2.8), которая доступна в
/lib/x86_64-linux-gnu/libz.so.1.2.8
, система выдает следующую ошибку.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Если я сбросил LD_LIBRARY_PATH
, "Браво" запускается нормально. Я понимаю, что вышеупомянутое поведение связано с тем, что LD_LIBRARY_PATH
имеет приоритет над путями каталогов, определенными /etc/ld.so.conf
при поиске связанных библиотек, и, следовательно, произошла вышеуказанная ошибка Мне просто любопытно, почему разработчики UNIX / LINUX не разработали ОС для поиска связанных библиотек в других каталогах в соответствии с иерархией, если первый экземпляр библиотеки имеет другую версию.
Проще говоря, системы UNIX / LINUX проходят через набор каталогов, пока не найдут нужную библиотеку. Но почему он не делает то же самое, пока не найдет ожидаемую версию, а не примет первый экземпляр библиотеки независимо от ее версии?
libz.so.1
является символической libz.so.1.2.8