É normal que a variável LD_LIBRARY_PATH esteja ausente em um ambiente?

15

Descobri por coincidência que no meu Debian Jessie não há LD_LIBRARY_PATHvariável (para ser exato printenv | grep LD, não mostra nada relacionado ao vinculador e echo "$LD_LIBRARY_PATH"também mostra nada).

Este é o caso do emulador de terminal x ( que pode limpá-lo devido ao setgid ), bem como no terminal básico ( Ctrl+Alt+F1).

Eu sei que isso LD_LIBRARY_PATH pode ser considerado ruim, então o Debian pode bloqueá-lo de alguma forma, mas por outro lado, existem alguns arquivos /etc/ld.so.conf.d/que contêm alguns diretórios a serem adicionados LD_LIBRARY_PATH. Nenhum dos meus arquivos rc (que eu conheço) mexe LD_LIBRARY_PATHtambém.

Por que não vejo uma LD_LIBRARY_PATHvariável?

calavera.info
fonte

Respostas:

22

Sim, é normal que você não tenha nenhum explícito LD_LIBRARY_PATH. Leia também ldconfig (8) e ld-linux (8) e sobre o rpath . Observe que as ldconfigatualizações /etc/ld.so.cache, não o LD_LIBRARY_PATH. Às vezes, você define o rpath de um executável explicitamente com o -Wl,-rpath,diretório passado gccno momento do link.

Se você precisar de um LD_LIBRARY_PATH(mas provavelmente não deveria), defina você mesmo (por exemplo, em ~/.bashrc).

Se você precisar de configurações de todo o sistema, você poderia por exemplo, considerar a adição /usr/local/lib/de /etc/ld.so.confe executar ldconfigapós a instalação de cada biblioteca lá.

O AFAIK $LD_LIBRARY_PATHé usado apenas pelo vinculador dinâmico ld-linux.so(e pelo dlopen (3) que o utiliza) após o execve (2) . Veja também ldd (1) .

Leia Como escrever bibliotecas compartilhadas, de Drepper, para mais.

Basile Starynkevitch
fonte
Esse foi o meu erro, eu acho que LD_LIBRARY_PATH é o produto da execução ldconfig. Enquanto isso, é a entrada do ldconfig junto com os arquivos /etc/ld.so.conf.
Calavera.info
1
Meu sentimento é que ldconfignão use $LD_LIBRARY_PATH(o que só é usado na ld-linux.soépoca)
Basile Starynkevitch
3
@ calavera.info não é nem. O vinculador dinâmico usa LD_LIBRARY_PATH junto com a saída ldconfigem tempo de execução. ldconfignem usa nem muda LD_LIBRARY_PATH.
Hbbs #
Agora percebo que eu o errei totalmente, provavelmente gastando muito tempo em Java, onde "classpath" é virtualmente a única configuração de vinculação dinâmica. Tudo parece estar claro agora, muito obrigado.
Calavera.info