Os arquivos executáveis são examinados no tempo de execução pelo linker de tempo de execução chamado ld.so.
Este interpretador especial completa as ligações entre o executável e as bibliotecas compartilhadas. Se o ld.so não conseguir encontrar e ler as dependências, ele irá falhar e o executável não irá ser carregado.
O linker ld.so mantém índice de todas as bibliotecas e a sua localização num arquivo especial chamado /etc/ld.so.cache. Ele é binário e, portanto, pode ser lido rapidamente pelo ld.so.
É por isso que um administrador Linux tem de estar preparado para gerir as bibliotecas compartilhadas e as suas versões para um correto funcionamento do sistema e os seus aplicativos.
Neste artigo você pode aprender mais sobre o processo de compilação e “linkagem” dos programas nas bibliotecas.
O comando ldd – List Dynamic Dependencies – fornece uma lista das dependências dinâmicas que um determinado programa precisa. Ele irá retornar o nome da biblioteca compartilhada e sua localização esperada.
O utilitário ldconfig cria os links e refaz o índice das bibliotecas dinâmicas do arquivo /etc/ld.so.cache.
Ele procura por bibliotecas nos diretórios /usr/lib e /lib, assim como nos diretórios listados em /etc/ld.so.conf, bem como o diretório informado na linha de comando.
Ainda é possível fornecer ao linker em tempo de execução ld.so uma lista de diretórios extras que podem conter bibliotecas compartilhadas através da variável ambiental LD_LIBRARY_PATH.
Uma lista de diretórios poderá ser configurada, separando-os por dois pontos “:”. Esta lista antecede a lista do arquivo ls.so.conf.
Por razões de segurança, a variável LD_LIBRARY_PATH é ignorada pelo ld.so quando este faz ligações de programas que possuem o bit SUID ou SGID habilitados.
Seu uso é comum para testar novas rotinas em bibliotecas em desenvolvimento ao invés de executar as rotinas já instaladas.
Toda vez que uma nova biblioteca for instalada, ou uma nova versão de biblioteca, é necessário atualizar o cache do linker ld.so com o comando ldconfig.