GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo resolver el error "no se puede abrir el archivo de objeto compartido" en las distribuciones de Linux basadas en Ubuntu

Hay una lista de errores comunes que veo a menudo en Ubuntu. Hay problema con merge lista, entonces hay BADSIG error, y una serie de errores comunes de actualización de Ubuntu.

Uno de esos errores comunes que veo a menudo al instalar un programa desde su código fuente es error al cargar bibliotecas compartidas . El error completo generalmente se ve así:

error al cargar bibliotecas compartidas:
no se puede abrir el archivo de objeto compartido:no existe tal archivo o directorio

Por ejemplo, estaba tratando de usar el servidor FreeRADIUS y me mostró este error:

radiusd: error while loading shared libraries:
libfreeradius-radius-2.1.10.so:
cannot open shared object file: No such file or directory

El motivo de este error es que las bibliotecas del programa se han instalado en un lugar donde el enlazador dinámico no puede encontrarlo.

Déjame mostrarte cómo puedes solucionar este problema.

Reparar ing 'no se puede abrir el archivo de objeto compartido:No existe el error de archivo o directorio'

Una forma rápida de corregir este "error al cargar bibliotecas compartidas" automáticamente es usar ldconfig.

Todo lo que necesita hacer es abrir la terminal (Ctrl+Alt+T) y escribir el siguiente comando:

sudo /sbin/ldconfig -v

Este forro debería resolver el problema en la mayoría de los casos. Sin embargo, si no es así, he discutido otro método para manejar este error. Pero antes de eso, déjame decirte qué hace el comando anterior.

¿Qué son los archivos de objetos compartidos? ¿Cómo soluciona el problema el comando anterior?

Verá, en C/C++, un .so (objeto compartido) es un archivo de biblioteca compilado. Se llama objeto compartido porque este archivo de biblioteca puede ser compartido por varios programas. Estas bibliotecas generadas generalmente se encuentran en los directorios /lib o /usr/lib.

Ahora, si se pregunta cómo solucionó este problema este pequeño comando, debe leer la página de manual de ldconfig que dice:

ldconfig crea los enlaces necesarios y el caché a las bibliotecas compartidas más recientes que se encuentran en los directorios especificados en la línea de comando, en el archivo /etc/ld.so.conf , y en los directorios de confianza (/lib y /usr/lib ). El caché es utilizado por el enlazador en tiempo de ejecución, ld.so o ld-linux.so . ldconfig comprueba el encabezado y los nombres de archivo de las bibliotecas que encuentra al determinar qué versiones deben tener sus enlaces actualizados.

Espero que esta solución rápida lo ayude a eliminar el desagradable error al cargar el mensaje de bibliotecas compartidas en Ubuntu y otros Linux.

De lo contrario, puede investigar un poco e intentar solucionar el problema de la forma en que se menciona en la siguiente sección.

Método alternativo para corregir el error 'no se puede abrir el archivo de objeto compartido'

El método discutido anteriormente soluciona el problema si la biblioteca en cuestión está disponible en su sistema. Pero ese puede no ser siempre el caso.

Si no tiene el programa instalado en su sistema, no tendrá su archivo de biblioteca. El ldconfig no puede hacer nada si no hay un archivo de biblioteca en primer lugar.

Entonces, el método alternativo es instalar el programa requerido y debería crear la biblioteca automáticamente.

Déjame mostrártelo con un ejemplo. Digamos que ves este error:

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

El problema es con libgobject versión 2.0. El número de versión es importante porque algunos programas dependen de una versión específica de la biblioteca y si no la encuentran, se quejan.

Ahora, apt proporciona la opción de búsqueda que se puede usar para buscar un paquete y conocer su versión antes de instalarlo.

[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

Ahora, este paquete librust-gobject-sys-dev podría ser lo que necesita si sabe que estaba intentando ejecutar un programa Rust. Pero, ¿y si fuera un programa de Python que estaba ejecutando el que se quejó?

Puede ampliar su búsqueda eliminando lib del nombre del paquete durante la búsqueda. lib significa biblioteca y las bibliotecas pueden ser proporcionadas por un paquete genérico que podría llamarse gobject-xyz.

Sería una buena idea buscar la cadena en los nombres del paquete (en lugar de la descripción) para obtener resultados más 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

En el resultado truncado anterior, deberá ver si el paquete está relacionado con el programa original que intentaba ejecutar. También debe comprobar la versión de la biblioteca proporcionada.

Una vez que haya identificado el paquete correcto, instálelo así:

sudo apt install package_name

Una vez instalado, puede ejecutar el comando ldconfig nuevamente para actualizar el caché:

sudo /sbin/ldconfig -v

Este método requiere algo de esfuerzo de su parte, pero así es como se manejan las dependencias.

Nada funciona, ¿ahora qué?

Si tiene la mala suerte, es posible que los métodos anteriores no funcionen para usted. ¿Qué puedes hacer?

Primero, tenga en cuenta que las bibliotecas compartidas pueden usarse desde otros paquetes en algunos casos. Si estaba intentando ejecutar el programa XYZ y el programa ABC instala la versión correcta de la biblioteca compartida, puede (o no) funcionar para usted. Puedes probarlo y probarlo.

En segundo lugar, si está intentando ejecutar un programa que es demasiado antiguo o demasiado nuevo, es posible que necesite una versión de biblioteca que no esté disponible para su distribución de Linux.

Lo que puede hacer es verificar si puede usar alguna otra versión del programa. Por ejemplo, usar la versión 3 de Eclipse en lugar de la versión 4. Esto puede ayudar en su caso.

La otra forma sería consultar el sitio web o los foros de los desarrolladores y ver si puede instalar manualmente la versión correcta de la biblioteca desde su código fuente. Eso requiere mucho esfuerzo (en 2020) pero no tienes muchas opciones.

¿Funcionó para ti?

Espero haberte aclarado un poco las cosas. ¿Logró solucionar el problema de las bibliotecas compartidas en su sistema? Si tiene preguntas, sugerencias, no dude en dejar un comentario. Chao :)



Ubuntu
  1. Ubuntu – ¿Cómo abrir un archivo .bak en Linux?

  2. Rpm:error al cargar bibliotecas compartidas:Libz.so.1:no se puede abrir el archivo de objeto compartido:no existe tal archivo

  3. Error de Linux al cargar bibliotecas compartidas:no se puede abrir el archivo de objeto compartido:no existe tal archivo o directorio

  4. libaio.so.1:no se puede abrir el archivo de objeto compartido

  5. libpulse.so.0:no se puede abrir el archivo de objeto compartido:no existe tal archivo o directorio

Cómo usar un comando de archivo en Linux

Cómo abrir un archivo en Linux

Cómo cambiar el límite de archivos abiertos en Linux

Cómo resolver:error:no existe tal rescate de grub de partición en Ubuntu Linux

Cómo instalar el último Kodi en distribuciones de Linux basadas en Ubuntu

Cómo corregir el error "El repositorio aún no es válido" en Ubuntu Linux