Como resolver não é possível abrir arquivo de objeto compartilhado

Solução detalhada completa para corrigir erros ao carregar erros de bibliotecas compartilhadas em distribuições Linux baseadas no Ubuntu.

22 de julho de 2020
Como resolver não é possível abrir arquivo de objeto compartilhado

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:

Comandos para usar no terminal

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:

Comandos para usar no terminal

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.

Comandos para usar no terminal

[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.

Comandos para usar no terminal

[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:

Comandos para usar no terminal

sudo apt package_name

Depois de instalado, você pode executar o comando ldconfig novamente para atualizar o cache:

Comandos para usar no terminal

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 :)

Aproveite e assista um de nossos vídeos