O que é ld_library_path usado para?

O que é ld_library_path usado para?
Antes de conhecer o caminho LD_Library, você deve ter o conceito de variáveis ​​de ambiente. Mas se você não souber, não se preocupe, explicarei o que é. As variáveis ​​cujo valor é determinado pelo sistema operacional ou capacidade de microsserviço são chamadas de variáveis ​​ambientais. Uma variável de ambiente é um valor dinamicamente designado que pode influenciar como os processos de computador em execução se comportam. O processo é executado no componente do ambiente do processo.

Em primeiro lugar, as variáveis ​​de ambiente foram desenvolvidas para o Unix, mas agora o Windows e o Linux também têm essas variáveis. Quando algum processo é criado, ele herda uma cópia do ambiente de tempo de execução de seus pais, com exceção das mudanças explícitas feitas pelo pai quando o filho é criado por padrão. Um par de nome/valor compõe uma variável de ambiente, e qualquer número deles pode ser gerado e referenciado a qualquer momento. Geralmente as letras maiúsculas são usadas ao nomear variáveis ​​do ambiente. Isso ajuda a diferenciar variáveis ​​de ambiente de outros tipos de nomes no código de programação em geral.No sistema operacional UNIX, as variáveis ​​de ambiente são sensíveis ao caso, mas não no DOS, OS/2 ou Windows.

LD_Library também é uma variável de ambiente do sistema operacional UNIX/Linux; Neste artigo, discutiremos essa variável de ambiente em detalhes.

Uso da variável ld_library_path

No sistema UNIX/Linux Ld_library_path Para informar o Dynamic Link Loader, um pequeno programa que começa todos os seus aplicativos, para determinar onde procurar bibliotecas compartilhadas dinâmicas com as quais um aplicativo estava vinculado. Um cólon (:) separa uma lista de diretórios, e esta lista é verificada antes mesmo de caminho/caminho de pesquisa interno e locais convencionais como (/lib,/usr/lib…).

Alguns outros usos de ld_library_path são:

  • Comparando novas versões de uma biblioteca compartilhada com um aplicativo que foi compilado anteriormente.
  • Realocação de bibliotecas compartilhadas, por exemplo, para manter vivos as versões anteriores.
  • Ele também é usado para criar um sistema auto-suficiente, ambiente relocável para aplicações maiores, para que sejam independentes das bibliotecas do sistema em mudança.

Problema com ld_library_path

É muito útil até você tentar usá -lo para resolver seus problemas. Essa linha parece estranha, mas é isso que realmente acontece quando você tenta aplicá -la em um ambiente de usuário/sistema, o cenário fica pior e todas!

Alguns problemas enfrentados usando ld_library_path são:

Segurança: Os diretórios ld_library_path são verificados primeiro, antes de sua localização real. Essa abordagem pode ser usada por um indivíduo malicioso para forçar seu aplicativo a executar uma versão maliciosa de uma biblioteca compartilhada. Uma das razões pelas quais os executáveis ​​setuid/setgid ignoram essa variável é devido a isso.

Desempenho: O carregador de link precisa procurar em todos os diretórios fornecidos até encontrar bibliotecas compartilhadas (vinculadas ao aplicativo). Consequentemente, fará com que várias chamadas do sistema se abram e façam com que elas caísão com a ENOENT "nenhum arquivo ou diretório". Se o caminho especificado tiver muitos diretórios, levará muito tempo e você poderá verificar isso no horário de inicialização do seu aplicativo. Como resultado, isso fará com que todo o sistema desacelere.

Inconsistência: A questão mais prevalente causada pelo uso de ld_library_path é inconsistência. Ld_library_path obriga um programa para carregar uma biblioteca compartilhada na qual não estava vinculada, o que é certamente incompatível com a versão original. Isso pode ser altamente evidente, como quando o aplicativo trava, ou pode resultar em resultados incorretos se a biblioteca retirada não corresponder exatamente à funcionalidade da versão original. Isso será difícil depurar o último, especialmente.

Solução

A melhor solução é quanto menos você o usa, menos problemas você enfrentará. De fato, tente evitar o uso de ld_library_path:

Como evitar ld_library_path:

Forneça localização correta da biblioteca compartilhada: Quando você compila seu aplicativo, você precisa fornecer a localização exata de bibliotecas compartilhadas e especificar o caminho na opção Linker '-rpath' para informar o vinculador para incluí-las no RunPath do seu executável ou você pode usar a variável ld_run_path para especificar vários caminhos

Ferramenta para corrigir o problema:Para corrigir/alterar o RunPath de um executável binário, existem programas disponíveis, como Chrpath Under Linux. O problema dessa maneira é que o espaço executável que carrega essas informações (eu.e. a string do caminho) não pode ser expandida, eu.e. você só pode reescrever um caminho existente.

Não coloque ld_library_path no perfil de usuário: Ao colocar ld_library_path no perfil de usuário, você criará problemas para si mesmo, então evite isso.

Não coloque ld_library_path no perfil do sistema: Alguns ISVs fornecem software que insere automaticamente as configurações globais de caminho da biblioteca LD nos perfis do sistema durante a instalação, ou mesmo levam ao usuário a fazê -lo. Basta dizer não! Tente lidar com o problema de outra maneira, por exemplo, escrevendo um script de wrapper ou diga ao fornecedor para corrigi -lo.

Ld_library_path é útil se usado para três usos mencionados na parte de uso, mas tente usá -lo o mínimo possível para se proteger de ter problemas.

Conclusão

Ld_library_path é uma variável ambiental usada em sistemas Linux/Unix. É usado para dizer aos carregadores dinâmicos de link onde procurar bibliotecas compartilhadas para aplicativos específicos. É útil até que você não mexa com isso. É melhor evitar o uso de ld_library_path e usar alternativas. Neste artigo, o uso da variável ambiental ld_library_path é discutido e, em seguida. Depois de ler este artigo, você conhecerá os prós e contras da variável ld_library_path.