Há uma lista de erros comuns que costumo ver no Ubuntu. Há problema com a lista de mesclagem e erro BADSIG e uma série de [erros de atualização do Ubuntu] comuns (/falha-ao-baixar-informacao-repositorio-ubuntu-13-04 [Como] Correção Falha ao baixar informações do repositório no Ubuntu 13.04).
Um dos erros comuns que vejo frequentemente ao instalar um programa a partir de seu código-fonte é erro ao carregar bibliotecas compartilhadas. O erro completo geralmente se parece com isto:
erro ao carregar bibliotecas compartilhadas: não é possível abrir o arquivo de objeto compartilhado: nenhum arquivo ou diretório
Por exemplo, estava tentando usar o servidor FreeRADIUS e ele me mostrou este erro:
radiusd: erro ao carregar bibliotecas compartilhadas: libfreeradius-radius-2.1.10.so: não é possível abrir o arquivo de objeto compartilhado: Não existe esse arquivo ou diretório O motivo por trás desse erro é que as bibliotecas do programa foram instaladas em um local onde o vinculador dinâmico não pode encontrá-lo.
Correção de erro de ‘não é possível abrir o arquivo de objeto compartilhado: arquivo ou diretório inexistente’
Neste tutorial rápido, mostrarei a maneira mais rápida e fácil de corrigir esse erro ao carregar bibliotecas compartilhadas.
Tudo que você precisa fazer é abrir o terminal (Ctrl + Alt + T) e digitar o seguinte comando:
sudo /sbin/ldconfig -v
Esta solução de um liner pode não ser aplicável em todos os casos e pode não resolver o problema para você, mas até agora este comando nunca me falhou.
O que são arquivos de objetos compartilhados? Como o comando acima corrige o problema?
Veja, em C/C ++, um .so (objeto compartilhado) é um arquivo de biblioteca compilado. É chamado de objeto compartilhado porque este arquivo de biblioteca pode ser compartilhado por vários programas. Essas bibliotecas geradas geralmente estão localizadas nos diretórios/lib ou/usr/lib.
Agora, se você quer saber como esse pequeno comando corrigiu esse problema, você deve ler a página de manual de ldconfig que diz:
ldconfig cria os links e cache necessários para as bibliotecas compartilhadas mais recentes encontradas nos diretórios especificados na linha de comando, no arquivo /etc/ld.so.conf e nos diretórios confiáveis (/lib e /usr/lib ). O cache é usado pelo vinculador de tempo de execução, ld.so ou ld-linux.so . ldconfig verifica o cabeçalho e os nomes dos arquivos das bibliotecas que encontra ao determinar quais versões devem ter seus links atualizados. Espero que esta solução rápida ajude você a eliminar o desagradável erro ao carregar mensagens de bibliotecas compartilhadas no Ubuntu e outros Linux.
Caso contrário, você pode fazer alguma investigação e tentar corrigir o problema da maneira que é mencionado na próxima seção.
Método alternativo para corrigir o erro "não é possível abrir o arquivo de objeto compartilhado"
O método discutido acima corrige o problema se a biblioteca em questão estiver disponível em seu sistema. Mas pode nem sempre ser o caso.
Se você não tiver o programa instalado em seu sistema, não terá seu arquivo de biblioteca. O ldconfig não pode fazer nada se não houver um arquivo de biblioteca em primeiro lugar.
Portanto, o método alternativo é instalar o programa necessário e ele deve criar a biblioteca automaticamente.
Deixe-me mostrar a você com um exemplo. Digamos que você veja este erro:
error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory
O problema é com libgobject versão 2.0. O número da versão é importante porque alguns programas dependem de uma versão específica da biblioteca e se não encontram, reclamam.
Agora, apt fornece a opção de pesquisa que pode ser usada para pesquisar um pacote e saber sua versão antes de instalá-lo.
[email protected]:~$ apt search libgobject Sorting... Done Full Text Search... Done librust-gobject-sys-dev/focal 0.9.0-2 amd64 FFI bindings to libgobject-2.0 - Rust source code
Agora, este pacote librust-gobject-sys-dev pode ser o que você precisa se você sabe que está tentando executar um programa Rust. Mas e se fosse um programa Python que você estava executando que reclamasse disso?
Você pode ampliar sua pesquisa removendo o lib do nome do pacote durante a pesquisa. A lib significa que a biblioteca e as bibliotecas podem ser fornecidas por um pacote genérico que pode ser denominado gobject-xyz.
Seria uma boa ideia pesquisar a string nos nomes do pacote (em vez da descrição) para obter resultados mais concisos.
[email protected]:~$ apt search --names-only gobject Sorting... Done Full Text Search... Done gobject-introspection/focal-updates 1.64.1-1~ubuntu20.04.1 amd64 Generate interface introspection data for GObject libraries
libavahi-gobject-dev/focal 0.7-4ubuntu7 amd64 Development headers for the Avahi GObject library
libavahi-gobject0/focal 0.7-4ubuntu7 amd64 Avahi GObject library
libcairo-gobject-perl/focal,now 1.005-2 amd64 [installed,automatic] integrate Cairo into the Glib type system in Perl
libcairo-gobject2/focal,now 1.16.0-4ubuntu1 amd64 [installed,automatic] Cairo 2D vector graphics library (GObject library)
libghc-gi-gobject-dev/focal 2.0.19-1build1 amd64 GObject bindings
libghc-gi-gobject-doc/focal,focal 2.0.19-1build1 all GObject bindings; documentation
Na saída truncada acima, você terá que ver se o pacote está relacionado ao programa original que você estava tentando executar. Você também deve verificar a versão da biblioteca fornecida.
Depois de identificar o pacote correto, instale-o assim:
sudo apt package_name
Depois de instalado, você pode executar o comando ldconfig novamente para atualizar o cache:
sudo /sbin/ldconfig -v
Este método requer algum esforço de sua parte, mas é assim que as dependências são tratadas.
Nada funciona, e agora?
Se você tiver a infelicidade, os métodos acima podem não funcionar para você. O que você pode fazer?
Primeiro, tenha em mente que as bibliotecas compartilhadas podem ser usadas de outros pacotes em alguns casos. Se você estava tentando executar o programa XYZ e o programa ABC instalou a versão correta da biblioteca compartilhada, pode (ou não) funcionar para você. Você pode dar um golpe e experimentar.
Em segundo lugar, se você estiver tentando executar um programa muito antigo ou muito novo, pode ser necessária uma versão de biblioteca que não está disponível para sua distribuição Linux.
O que você pode fazer é verificar se você pode usar alguma outra versão do programa. Por exemplo, usar o Eclipse versão 3 em vez da versão 4. Isso pode ajudar no seu caso.
A outra forma seria verificar o site ou fóruns dos desenvolvedores e ver se você pode instalar manualmente a versão correta da biblioteca a partir do código-fonte. Isso requer muito esforço (em 2020), mas você não tem muitas opções.
Isso funcionou para você?
Espero ter deixado as coisas um pouco mais claras para você. Você conseguiu corrigir o problema de bibliotecas compartilhadas em seu sistema? Se você tiver dúvidas, sugestões, sinta-se à vontade para deixar um comentário. Tchau :)
Via itsfoss.com. Você pode conferir o post original em inglês:
How To Solve “cannot open shared object file” Error in Ubuntu-based Linux DistributionsÚltima atualização deste artigo: 22 de julho de 2020
