У мене є двійковий виконуваний файл з назвою "альфа", для якого потрібна пов'язана бібліотека (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
, "bravo" починає чудово. Я розумію, що вищезгадана поведінка полягає в тому, що вона LD_LIBRARY_PATH
має перевагу над шляхами до каталогу, визначеними в /etc/ld.so.conf
процесі пошуку зв’язаних бібліотек, і, отже, вищезгадана помилка. Мені просто цікаво, чому розробники UNIX / LINUX не створили ОС для пошуку пов'язаних бібліотек в інших каталогах відповідно до ієрархії, якщо перший екземпляр бібліотеки має іншу версію.
Простіше кажучи, системи UNIX / LINUX проходять через набір каталогів, поки не знайдуть потрібну бібліотеку. Але чому він не робить те саме, доки не знайде очікувану версію, а не приймає перший екземпляр бібліотеки незалежно від її версії?
libz.so.1
є символьним посиланням наlibz.so.1.2.8