Ho un eseguibile binario chiamato "alpha" che richiede una libreria collegata (libz.so.1.2.7) che si trova in /home/username/myproduct/lib/libz.so.1.2.7
Esporto lo stesso nella mia istanza di terminale prima di generare il mio eseguibile binario eseguendo il comando seguente.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Ora, quando ho generato un'altra applicazione "bravo" che richiede la stessa libreria ma di versione diversa, ovvero (libz.so.1.2.8) che è disponibile in
/lib/x86_64-linux-gnu/libz.so.1.2.8
, il sistema genera il seguente errore.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Se deseleziono LD_LIBRARY_PATH
, "bravo" si avvia bene. Comprendo che il comportamento sopra riportato è dovuto al fatto che LD_LIBRARY_PATH
ha la precedenza sui percorsi di directory definiti /etc/ld.so.conf
durante la ricerca di librerie collegate e di conseguenza si è verificato l'errore sopra riportato. Sono solo curioso di sapere perché gli sviluppatori di UNIX / LINUX non hanno progettato il sistema operativo per cercare librerie collegate in altre directory secondo la gerarchia se la prima istanza di libreria è di versione diversa.
In poche parole, i sistemi UNIX / LINUX attraversano una serie di directory fino a trovare la libreria richiesta. Ma perché non fa lo stesso fino a quando non trova la versione prevista anziché accettare la prima istanza della libreria indipendentemente dalla sua versione?
libz.so.1
è un collegamento simbolico alibz.so.1.2.8