Tengo un ejecutable binario llamado "alfa" que requiere una biblioteca vinculada (libz.so.1.2.7) que se coloca en /home/username/myproduct/lib/libz.so.1.2.7
Exporte lo mismo a mi instancia de terminal antes de generar mi ejecutable binario ejecutando el siguiente comando.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Ahora, cuando engendro otra aplicación "bravo" que requiere la misma biblioteca pero de diferente versión, es decir (libz.so.1.2.8) que está disponible
/lib/x86_64-linux-gnu/libz.so.1.2.8
, el sistema arroja el siguiente error.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Si desarmado LD_LIBRARY_PATH
, "bravo" comienza bien. Entiendo que el comportamiento anterior se debe a que LD_LIBRARY_PATH
tiene prioridad sobre las rutas de directorio definidas /etc/ld.so.conf
al buscar bibliotecas vinculadas y, en consecuencia, se produjo el error anterior. Tengo curiosidad por saber por qué los desarrolladores de UNIX / LINUX no han diseñado el sistema operativo para buscar bibliotecas vinculadas en otros directorios según la jerarquía si la primera instancia de la biblioteca es de una versión diferente.
En pocas palabras, los sistemas UNIX / LINUX atraviesan un conjunto de directorios hasta encontrar la biblioteca requerida. Pero, ¿por qué no hace lo mismo hasta que encuentra la versión esperada en lugar de aceptar la primera instancia de la biblioteca, independientemente de su versión?
libz.so.1
es un enlace simbólico alibz.so.1.2.8