Por que o Logic Application não funciona, exceto diretamente sob o sudo?

0

Estou tentando executar o aplicativo Lógica para falar com meu analisador lógico, e observo o seguinte comportamento, depois de instalar o regras sob o driver.

./Logic 
./Logic: cpp_libs/libc.so.6: version 'GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)

sudo bash
./Logic 
./Logic: cpp_libs/libc.so.6: version 'GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)

sudo ./Logic 
# Application runs

Qual é a causa desse comportamento estranho?

Estou executando o Ubuntu 14.04.

    
por merlin2011 08.03.2016 / 06:53

1 resposta

0

Uma explicação plausível para a diferença de comportamento é que os comandos que funcionam e não funcionam estão carregando bibliotecas diferentes porque possuem configurações diferentes para o caminho de pesquisa da biblioteca LD_LIBRARY_PATH . Existem outras variáveis de ambiente que podem ser importantes, mas são menos prováveis, como LD_PRELOAD , PATH (se ./Logic for um script que depende de alguns executáveis - mas a mensagem de erro não for consistente com isso), etc.

Uma explicação plausível do motivo pelo qual invocar o comando de uma instância interativa do bash não funciona, mas invocar o comando diretamente de sudo works é que você está configurando esse ambiente em .bashrc , o arquivo que instâncias interativas de bash é executado. A execução de sudo limpa quase todas as variáveis de ambiente, portanto sudo ./Logic works; mas sudo bash seguido por ./Logic não funciona porque executar bash define essas variáveis novamente.

Você deve definir variáveis de ambiente em .profile (que é executado quando a sessão é iniciada ), não em .bashrc . Seus sintomas são característicos de um dos problemas com variáveis variáveis de ambiente em .bashrc .

A configuração para LD_LIBRARY_PATH provavelmente não deve estar presente em seus arquivos de configuração. Adicionar um diretório em que as bibliotecas do sistema de sombras provavelmente seja uma fonte de incompatibilidades. Se você precisar executar um programa específico, defina LD_LIBRARY_PATH somente ao executar esse programa (por meio de um invólucro de shell, se quiser automatizá-lo), não o defina globalmente.

    
por 09.03.2016 / 02:07