Qual é o valor padrão de LD_LIBRARY_PATH? [duplicado]

7

No meu caso, parece que LD_LIBRARY_PATH está definido para a cadeia vazia. Mas todas as ferramentas de sistema padrão ainda funcionam bem, então acho que o vinculador dinâmico verifica esse caso e usa algum padrão para LD_LIBRARY_PATH nesse caso.

Qual é esse valor padrão? Eu acho que pelo menos inclui /usr/lib mas o que mais? Existe alguma boa maneira sistemática de descobrir os locais padrão onde o vinculador dinâmico procuraria?

Esta questão é um pouco diferente de quais caminhos o vinculador dinâmico pesquisará. Ter um valor padrão significa que ele usará o valor de LD_LIBRARY_PATH se fornecido ou, se não for fornecido, usará o valor padrão - que significa que não usará o valor padrão se LD_LIBRARY_PATH for fornecido.

    
por Albert 28.03.2017 / 11:20

1 resposta

15

O vinculador dinâmico usual no Linux usa um cache para encontrar suas bibliotecas. O cache é armazenado em /etc/ld.so.cache e é atualizado por ldconfig , que examina os caminhos dados em /etc/ld.so.conf (e, atualmente, normalmente arquivos em /etc/ld.so.conf.d ).

Portanto, não há valor padrão para LD_LIBRARY_PATH , a pesquisa de biblioteca padrão não é necessária. Se LD_LIBRARY_PATH for definido, ele será usado primeiro, mas não desativará as outras pesquisas (que também incluem alguns diretórios padrão).

A ld.so(8) manpage tem os detalhes:

If a shared object dependency does not contain a slash, then it is searched for in the following order:

  • Using the directories specified in the DT_RPATH dynamic section attribute of the binary if present and DT_RUNPATH attribute does not exist. Use of DT_RPATH is deprecated.

  • Using the environment variable LD_LIBRARY_PATH (unless the executable is being run in secure-execution mode; see below). in which case it is ignored.

  • Using the directories specified in the DT_RUNPATH dynamic section attribute of the binary if present.

  • From the cache file /etc/ld.so.cache, which contains a compiled list of candidate shared objects previously found in the augmented library path. If, however, the binary was linked with the -z nodeflib linker option, shared objects in the default paths are skipped. Shared objects installed in hardware capability directories (see below) are preferred to other shared objects.

  • In the default path /lib, and then /usr/lib. (On some 64-bit architectures, the default paths for 64-bit shared objects are /lib64, and then /usr/lib64.) If the binary was linked with the -z nodeflib linker option, this step is skipped.

Se LD_LIBRARY_PATH estiver vazio, é ignorado . Se estiver definido para esvaziar valores (com LD_LIBRARY_PATH=: , por exemplo), esses valores vazios são interpretado como o diretório atual .

    
por 28.03.2017 / 11:24