Os utilizadores de Linux encontram frequentemente o erro de carregamento de bibliotecas partilhadas
quando executam programas, e é também familiar a muitos programadores e a qualquer pessoa que deseje compilar software no seu sistema. Literalmente, significa que existe um problema ao carregar as bibliotecas partilhadas.
O erro"erro ao carregar bibliotecas partilhadas
" significa que, ao executar um programa ou script, o sistema operativo não conseguiu encontrar e carregar uma ou mais bibliotecas necessárias para que esse programa funcione. Este é um problema comum nos sistemas operativos do tipo UNIX. Quando um programa é compilado, pode referir-se a várias bibliotecas externas que devem estar disponíveis em tempo de execução. Se estas bibliotecas estiverem em falta ou indisponíveis, ocorre um erro ao carregar as bibliotecas partilhadas.
Mesmo que não compile os seus programas, poderá ver este erro: directory_name: cannot open shared object file: No such file or diretory
bastante frequente quando instala novos programas que não através do gestor de pacotes ou programas destinados a outra distribuição. Isso ocorre porque o sistema não consegue encontrar a biblioteca. Por que ela não pode ser encontrada e carregada?
Várias razões, geralmente tudo se resume a uma biblioteca que:
Na resolução do problema, vamos guiar-nos por estas razões e tentar resolvê-las.
De seguida, vamos considerar exemplos específicos de resolução deste problema com base nas razões mencionadas no parágrafo anterior.
Não há nada complicado aqui e tudo é bastante claro - a biblioteca simplesmente não está presente no sistema, é por isso que recebemos este erro. É por isso que precisamos de encontrar o pacote da biblioteca com a ajuda de um gestor de pacotes e instalá-lo. Normalmente, os pacotes com bibliotecas são chamados da mesma forma que as próprias bibliotecas, com o prefixo lib
.
Se estivermos a perder a biblioteca libfuse2.so
, podemos encontrá-la no Ubuntu com este comando:
$ sudo apt search libfuse2
Então, a única coisa que resta a fazer é instalá-la:
$ sudo apt install libfuse2
Quando é necessário construir um programa a partir do código fonte, é necessário instalar também os ficheiros de cabeçalho:
$ sudo apt install libfuse-dev
E assim para qualquer biblioteca. Mas isso nem sempre funciona.
Na prática, há casos em que a biblioteca é instalada, mas o erro persiste e não permite que os utilizadores interajam normalmente com o sistema. O que fazer num caso destes? Em primeiro lugar, verificar se o gestor de arranque do Linux não consegue encontrar a biblioteca. A pesquisa deve ser efectuada nos diretórios especificados nos ficheiros de configuração /etc/ld.conf.d/
. Por norma, estes são /usr/lib, /lib, /usr/lib64, /lib64
. Se a biblioteca estiver instalada num diretório diferente, esta é obviamente a raiz do problema.
Pode ver que bibliotecas estão atualmente disponíveis para o carregador utilizando o comando:
$ ldconfig -p
Encontre onde sua biblioteca está localizada usando o comando locate
. Por exemplo, estamos interessados na biblioteca librtfreader.so:
$ locate librtfreader
Quando soubermos a localização de /opt/kingsoft/wps-office/office6/
, precisamos de tornar possível que o carregador detecte a biblioteca. Adicionamos o caminho /etc/ld.so.conf.d/
ao ficheiro de configuração ou à variável LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Pode instalar com qualquer biblioteca que invoque o erro. Também pode seguir o caminho menos complicado de criar uma ligação simbólica para a biblioteca correta no diretório correto:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Isso geralmente acontece quando se usa programas para uma distribuição que não está instalada. Cada biblioteca tem uma versão adicional, que é escrita após a extensão .so
. Por exemplo, libav.so.1
. O número da versão muda sempre que uma biblioteca é corrigida.
É comum que em uma distribuição um programa seja construído com uma dependência de biblioteca, como libc .so.1
, e em outra distribuição haja apenas libc.so.2
. Na maioria dos casos, as diferenças são pequenas e o programa pode ser executado na segunda versão da biblioteca. Assim, podemos simplesmente criar um link simbólico para ela.
Por exemplo, não existe a biblioteca libusb-1.0.so.1
. Mas existe a libusb-1.0.so.0.1
, e nós podemos usá-la:
Para fazer isso, simplesmente criamos um link simbólico para a biblioteca:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Muitas vezes o programa não perceberá a substituição e funcionará. Como solução inteligente, tente encontrar na Internet a versão correta da biblioteca para a sua arquitetura e coloque-a na pasta /usr/lib/
ou /usr/lib64/
. Mas depois disso é desejável atualizar a cache:
$ sudo ldconfig
Se o problema persistir após estes passos, recomenda-se que consulte a documentação do programa ou do sistema operativo para obter informações mais pormenorizadas sobre as versões de biblioteca necessárias e a forma de as instalar.