ldconfig ignora alguns arquivos sob / usr / local / lib /

1

Ao tentar iniciar um determinado programa, recebi a seguinte mensagem de erro:

error while loading shared libraries: foo.so.0: cannot open shared object file: No such file or directory

Portanto, criei a biblioteca necessária e a instalei no diretório /usr/local/lib/ . No entanto, depois de criar a biblioteca, havia apenas os arquivos foo.so , foo.so.1 e foo.so.1.0.8 sob /usr/local/lib/ . Então criei um link simbólico adicional para foo.so.1.0.8 named foo.so.0 . Eu verifiquei que /usr/local/lib está incluído em algum arquivo em /etc/ld.so.conf.d/ e iniciei sudo ldconfig .

Infelizmente ldconfig parece ignorar o meu link simbólico criado por mim. ldconfig -v imprime apenas a seguinte linha:

foo.so.1 -> foo.so.1.0.8

ldconfig -p imprime apenas as duas linhas seguintes:

foo.so.1 (libc6,x86-64) => /usr/local/lib/foo.so.1

foo.so (libc6,x86-64) => /usr/local/lib/foo.so

Não há um bit cego do arquivo foo.so.0 . O que tenho que fazer?

    
por user1494080 19.02.2014 / 00:25

2 respostas

1

TL: DR: Use uma versão (ou compilação) do programa que suporte a versão da biblioteca instalada, se possível.

Como bodhi.zazen diz , é É difícil saber exatamente o que está acontecendo sem os comandos exatos específicos que você executou e a saída. No entanto, foo.so.0 e foo.so.1 não devem ser compatíveis.

Para fazer um programa compilado para usar a versão principal 0 de um trabalho de biblioteca com a versão principal 1, é recomendável reconstruir (recompilar e vincular novamente) o programa. Além disso, a interface que uma biblioteca fornece aos programas pode mudar, e geralmente muda, nas principais versões, portanto, isso às vezes é prático.

Normalmente, é melhor instalar uma versão mais recente do programa que suporte a versão da biblioteca que você deseja usar, se possível.

Como alternativa, se você puder instalar a versão antiga da biblioteca ao lado da nova, isso também poderá fazer com que o programa funcione. (Se você tem certeza de que nenhum outro programa usa a versão atualmente instalada da biblioteca, você pode desinstalá-lo antes de instalar o antigo. Se ele for fornecido por um pacote do Ubuntu, você poderá fazer isso desinstalando esse pacote. As principais versões de uma biblioteca muitas vezes suportam sendo instaladas ao mesmo tempo. p>

Nos casos em que não é possível instalar a versão da biblioteca que o programa precisa e você está disposto a aceitar sérias instabilidades e comportamentos imprevisíveis do programa, ocasionalmente é possível fazê-lo trabalhar com a nova biblioteca fazendo uma cópia, nomeando-a como a biblioteca antiga e editando as informações da versão dentro dela com um editor hexadecimal. Já fiz isso antes, mas nunca confiei seriamente em software que foi feito para funcionar dessa maneira, e você também não deveria.

Esta resposta é deliberadamente geral. Sem mais detalhes sobre o o que programa precisa da biblioteca, como o programa é (ou pode ser) instalado, e quais versões da biblioteca ele suporta, provavelmente não é possível dar conselhos mais detalhados.

    
por Eliah Kagan 01.01.2017 / 17:55
0

Pelo que eu me lembro no Ubuntu, apenas adicionando links simbólicos em / usr / local / lib pode não ser suficiente. Precisamos atualizar a entrada ld.so.conf correspondente a esta para deixar o ldconfig saber quais links simbólicos ele tem que criar para nós.

Como o bodhi.zazen mencionou, a instalação a partir do apt é mais simples, porque o apt muito provavelmente configuraria os arquivos ld.so.conf também.

    
por BHS 12.11.2014 / 07:35