Mam binarny plik wykonywalny o nazwie „alpha”, który wymaga połączonej biblioteki (libz.so.1.2.7), która jest umieszczona w /home/username/myproduct/lib/libz.so.1.2.7
Eksportuję to samo do mojej instancji terminala przed spawnem mojego binarnego pliku wykonywalnego, wykonując następujące polecenie.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Teraz, gdy odradzam inną aplikację „brawo”, która wymaga tej samej biblioteki, ale innej wersji, tj. (Libz.so.1.2.8), która jest dostępna w
/lib/x86_64-linux-gnu/libz.so.1.2.8
systemie, system generuje następujący błąd.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Jeśli wyłączę LD_LIBRARY_PATH
, „brawo” zacznie się dobrze. Rozumiem, że powyższe zachowanie jest LD_LIBRARY_PATH
nadrzędne, ponieważ ma pierwszeństwo przed ścieżkami katalogu zdefiniowanymi /etc/ld.so.conf
podczas wyszukiwania bibliotek połączonych, w wyniku czego wystąpił powyższy błąd. Jestem tylko ciekawy, dlaczego programiści UNIX / LINUX nie zaprojektowali systemu operacyjnego do wyszukiwania bibliotek połączonych w innych katalogach zgodnie z hierarchią, jeśli pierwsza instancja biblioteki ma inną wersję.
Mówiąc najprościej, systemy UNIX / LINUX przechodzą przez zestaw katalogów, aż znajdzie wymaganą bibliotekę. Ale dlaczego nie robi tego samego, dopóki nie znajdzie oczekiwanej wersji, zamiast zaakceptować pierwszą instancję biblioteki niezależnie od jej wersji?
libz.so.1
jest dowiązaniem symbolicznym dolibz.so.1.2.8