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

22 de julho de 2020

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

Confira também a versão original desse post em inglês
Esse post foi originalmente escrito por Abhishek Prakash e publicado no site itsfoss.com. Tradução sujeita a revisão.

How To Solve “cannot open shared object file” Error in Ubuntu-based Linux Distributions

Propaganda
Blog Comments powered by Disqus.
Propaganda