J'ai un exécutable binaire nommé "alpha" qui nécessite une bibliothèque liée (libz.so.1.2.7) qui est placée à /home/username/myproduct/lib/libz.so.1.2.7
J'exporte le même vers mon instance de terminal avant de générer mon exécutable binaire en exécutant la commande suivante.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Maintenant, quand je lance une autre application "bravo" qui nécessite la même bibliothèque mais de version différente, c'est-à-dire (libz.so.1.2.8) qui est disponible dans
/lib/x86_64-linux-gnu/libz.so.1.2.8
, le système lance l'erreur suivante.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Si je désactive le LD_LIBRARY_PATH
, "bravo" démarre bien. Je comprends que le comportement ci-dessus est dû à la LD_LIBRARY_PATH
priorité sur les chemins de répertoire définis dans /etc/ld.so.conf
lors de la recherche de bibliothèques liées et, par conséquent, l'erreur ci-dessus s'est produite. Je suis simplement curieux de savoir pourquoi les développeurs d'UNIX / LINUX n'ont pas conçu le système d'exploitation pour rechercher des bibliothèques liées dans d'autres répertoires selon la hiérarchie si la première instance de bibliothèque est de version différente.
Autrement dit, les systèmes UNIX / LINUX parcourent un ensemble de répertoires jusqu'à ce qu'ils trouvent la bibliothèque requise. Mais pourquoi ne fait-il pas la même chose jusqu'à ce qu'il trouve la version attendue plutôt que d'accepter la première instance de bibliothèque quelle que soit sa version?
libz.so.1
est un lien symbolique verslibz.so.1.2.8