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
Eu 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 spawno outro aplicativo "bravo" que requer a mesma biblioteca mas de versão diferente, ou seja (libz.so.1.2.8) que está disponível em
/lib/x86_64-linux-gnu/libz.so.1.2.8
, 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 desabilitar 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
ao procurar bibliotecas vinculadas e, consequentemente, ocorreu o erro acima. Estou curioso para saber por que os desenvolvedores do UNIX/LINUX não projetaram o sistema operacional para procurar bibliotecas vinculadas em outros diretórios de acordo com a hierarquia se a primeira instância da biblioteca for 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?