terça-feira, 14 de dezembro de 2021

Gerenciamento de Bibliotecas compartilhadas no Linux (ldd, ldconfig, ld.so)

 Aula

Gerenciamento de Bibliotecas compartilhadas no Linux (ldd, ldconfig, ld.so)

Bibliotecas
Comando ldd
Exibe as bibliotecas compartilhadas requeridas por cada um dos programas listados na sua linha de comando, trazendo o nome da biblioteca e o  local onde se espera encontrá-la.
ldd (programas) enter Imprime as dependências de bibliotecas compartilhadas.
ldd --version enter Mostra a versão do ldd.

ldd -v (programa) enter - Modo verbose para o programa especificado.

ldd -v /bin/ls enter
  

Vinculando as bibliotecas compartilhadas - ld.so:

Os programas executáveis dinamicamente vinculados são examinados, no momento da execução, pelo vinculador dinâmico de objetos compartilhados ld.so
Ele procura por dependências no executável que está sendo carregado e tenta satisfazer vínculos a bibliotecas compartilhadas de sistema que não estejam resolvidos. Se ele não encontrar uma biblioteca, o programa não poderá rodar.

ld.so pode procurar pelos diretórios que contém bibliotecas na variável LD_LIBRARY_PATH ou as bibliotecas são procuradas em um índice de nomes e localizações de bibliotecas (binários) chamado /etc/ld.so.cache.

Adicionar novas entradas ao cache: adicione o diretório que contém as bibliotecas ao arquivo /etc/ld.so.conf e atualize o cache com o comando ldconfig.

ld config - Configura ligações em tempo de execução do ligador dinâmico (ld.so).
Cria os links e cache necessários para as bibliotecas compartilhadas mais recentes encontradas nos diretórios especificados na CLI, no arquivo /etc/ld.so.conf e nos diretórios /lib e /usr/lib.

ld config -p enter

Examina o conteúdo do cache de bibliotecas ld.so.cache

idconfig enter
Reconstrói o cache incluindo as atualizações realizadas em /etc/ld.so.conf.

Outro local em que ele pode procurar bibliotecas é na variável de ambiente LD_LIBRARY_PATH
Contém uma lista de diretórios serparados por: onde o sistema irá procurar por determinada biblioteca dinâmica (s*.so).
Quando um programa precisa de uma biblioteca dinâmica, o sitema a procura nos diretórios listados em LD_LIBRARY_PATH, depois no arquivo de cache /etc/ld.so.cache e então nos diretórios /lib e/usr/lib.

Para visualizar o coneteúdo da variável de ambiente LD_LIBRARY_PATH, use o seguinte comando:
echo $LD_LIBRARY_PATH 

RESUMO: Bibliotecas compartilhadas

1 O usuário executa um programa qualquer, 
2 O programa ld.so é invocado para descobrir as dependências do programa do usuário e vincular as bibliotecas necessárias.
3 Para isso ld.so consulta diversos diretórios que contém bibliotecas, ex: /lib e a variável de ambiente LD_LIBRARY_PATH
4 Ao encontrar as dependências requeridas, efetura a vinculação e assim as funções da biblioteca ficam disponíveis para o programa chamador, e ele é então executado.
5 o ld.so também pode consultar um cache de nomes de bibliotecs e caminhos chamado /etc/ld.so.cache que não é legível por humanos.
6 É possível acrescentar mais caminhos de diretórios ao ld.so.cache editando-se o arquivo de configuração /etc/ld.so.conf.
7 Caso o /etc/ld.so.conf seja editado, rode o programa idconfig logo após para atualizar o cache (/etc/ld/so.cache) com as novas configurações.

Nenhum comentário:

Postar um comentário