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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.