Eu tenho um executável binário chamado "alpha" que requer uma biblioteca vinculada (libz.so.1.2.7) que é colocada em /home/username/myproduct/lib/libz.so.1.2.7
Exporto o mesmo para minha instância de terminal antes de gerar meu executável binário executando o seguinte comando.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Agora, quando eu surgir outro aplicativo "bravo" que requer a mesma biblioteca, mas de versão diferente, isto é, (libz.so.1.2.8) que está disponível no
/lib/x86_64-linux-gnu/libz.so.1.2.8
sistema, o sistema lança o seguinte erro.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Se eu desmarcar a opção LD_LIBRARY_PATH
, "bravo" inicia bem. Eu entendo que o comportamento acima é porque LD_LIBRARY_PATH
tem precedência sobre os caminhos de diretório definidos /etc/ld.so.conf
enquanto procura bibliotecas vinculadas e, consequentemente, ocorreu o erro acima. Estou curioso para saber por que os desenvolvedores do UNIX / LINUX não criaram o sistema operacional para procurar bibliotecas vinculadas em outros diretórios de acordo com a hierarquia, se a primeira instância da biblioteca é de versão diferente.
Simplificando, os sistemas UNIX / LINUX percorrem um conjunto de diretórios até encontrar a biblioteca necessária. Mas por que ele não faz o mesmo até encontrar a versão esperada em vez de aceitar a primeira instância da biblioteca, independentemente de sua versão?
libz.so.1
é um link simbólico paralibz.so.1.2.8