LD_LIBRARY_PATH sempre em branco após o sudo

9

Eu recebo erros de biblioteca compartilhada sempre que parece instalar o software manualmente. Após a execução, echo $LD_LIBRARY_PATHele aparece como ... nada . Eu tentei adicionar /usr/local/liba um .confarquivo, /etc/ld.so.conf.dmas parece que ele nunca é executado.

Isso também não funciona (aspas ou outras):

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
sudo ldconfig -v

O valor será definido temporariamente, mas não o manterá se eu sair de uma janela do terminal. A reinicialização também não faz nada.

Raiva dissidente
fonte
Tente adicioná-lo ao #~/.bashrc
Kevdog777
Não é uma duplicata; a pergunta é irrelevante e a resposta não funciona.
Dissident Rage
1
Sim, deixe-me usar um software com defeito de um ano atrás, em vez de me permitir atualizá-lo para testar se alguma coisa mudou para melhor.
Dissident Rage

Respostas:

7

Adicione o seguinte ao seu .bashrc:

vim ~/.bashrc

...
export LD_LIBRARY_PATH=/usr/local/lib

Isso permitirá que você reinicie o computador e ainda tenha esse caminho atribuído.

Kevdog777
fonte
2
Isso é bom para um usuário. E para todos os usuários?
Dissident Rage
2
@DissidentRage: adicionar o mesmo para /etc/bash.bashrc
JdeHaan
Vou marcar isso como a resposta, porque isso funciona para o escopo especificado. O que posso fazer sobre os arquivos que claramente não estão sendo executados /etc/ld.so.conf.d?
Dissident Rage
1

No Red Hat Enterprise Linux (RHEL) 6, /etc/ld.so.confcontém include ld.so.conf.d/*.conf. Sem essa linha, os itens /etc/ld.so.conf.d/*.confnunca seriam analisados.

Para ver quais bibliotecas / diretórios ldconfigestão analisando

ldconfig -v 

Imprima o número da versão atual, o nome de cada diretório conforme ele é verificado e os links criados.

pyther
fonte
Sim, verifiquei /etc/ld.so.confmais cedo, pois estava curioso sobre o que continha. Ele tinha a includelinha.
Dissident Rage
A execução ldconfig -vpode lhe dar uma idéia do motivo pelo qual a biblioteca não está sendo incluída. Você pode executar ldconfig -ppara imprimir as bibliotecas e diretórios que estão no arquivo de cache atual.
pyther
0

Finalmente resolvi isso com um alias:

alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'

Certifique-se de usar aspas simples, para que as variáveis ​​sejam expandidas no momento da invocação, não no momento em que o alias é definido.

Este:

  • preserva HOME (que de outra forma é definido como / root)
  • preserva PATH (que de outra forma é definido como um caminho 'seguro' em suders)
  • preserva o valor atual de LD_LIBRARY_PATH (que, de outra forma, fica em branco)

(Você pode ver como as coisas são definidas com sudo bash -c "echo $HOME":)

Estou trabalhando com drivers personalizados e sempre tenho que sudo meus programas de teste para acessar o driver. Não quero instalar versões de teste de bibliotecas na área do sistema, portanto, uso LD_LIBRARY_PATH para configurar um diretório de teste específico, conforme necessário. Não consigo definir um LD_LIBRARY_PATH fixo, preciso alterá-lo e manter a configuração atual. Preservar PATH e HOME me dá acesso ao meu ambiente de trabalho - scripts e estrutura de diretórios.

Esse alias evita ter que conceder permissões gerais em sudoers ... e aparentemente não há solução alternativa para LD_LIBRARY_PATH, independentemente das configurações do sudoers. Ele não funciona no sudo dentro dos scripts, mas esses podem ser codificados conforme necessário.

maharvey67
fonte