¿Por qué /lib/libc.so.6 falta?

18
find | grep libc.so.6

revela que está en /lib/i386-linux-gnu/libc.so.6 , pero un script que estaba ejecutando esperaba que estuviera directamente debajo de /lib , entonces ¿por qué no hay al menos un enlace simbólico?

¿Me arriesgaría a romper algo si pusiera un enlace simbólico allí?

    
pregunta Erik B 05.05.2011 - 17:00

3 respuestas

21

libc.so se movió como parte del trabajo multiarch en Ubuntu 11.04. La razón por la que no puede haber un enlace simbólico es que el propósito de multiarch es permitir la instalación de las versiones i386 y amd64 de libc al mismo tiempo para que pueda ejecutar 32 bits binarios más fácilmente en sistemas de 64 bits y viceversa (y otras situaciones similares). Si el paquete libc6 contiene un enlace simbólico a la nueva ubicación, entonces las versiones de ese paquete para diferentes arquitecturas no se pueden instalar al mismo tiempo (¿qué versión del enlace simbólico elegiría dpkg ?), Derrotando a la totalidad punto del ejercicio.

Todo lo que codifica el camino a libc.so debe actualizarse para que funcione correctamente desde Ubuntu 11.04 en adelante. Si el script del que habla es parte de Ubuntu, informe un error y agregue la etiqueta multiarch .

    
respondido por el Colin Watson 05.05.2011 - 19:53
9

El kernel carga las bibliotecas dinámicas, las rutas no están codificadas en un programa. Un programa simplemente dice "Necesito libc.so.6". Luego, el sistema busca en las rutas de la biblioteca como se define en /etc/ld.so.conf , que incluye /usr/lib y /lib de manera predeterminada. Este archivo incluye archivos de configuración adicionales en /etc/ld.so.conf.d .

En mi sistema de 64 bits, libc.so.6 se puede encontrar en /lib/x86_64-linux-gnu/libc.so.6 debido a la ruta definida en /etc/ld.so.conf.d/x86_64-linux-gnu.conf :

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

Para saber qué biblioteca carga un programa, use ldd como en ldd /bin/bash :

    linux-vdso.so.1 =>  (0x00007ffff1dff000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)

Al poner el enlace simbólico, no se rompería nada.

Para obtener una lista de directorios que se buscan, ejecute:

ldconfig -v -N | grep '^/'

-v hace que se muestre una lista de archivos + directorios, -N impide que se vuelva a crear la caché ( /etc/ld.so.cache ).

    
respondido por el Lekensteyn 05.05.2011 - 17:29
5

Simplemente agregue el enlace simbólico al archivo libc.so.6 de la siguiente manera:

sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

Lo mismo ocurre con otros archivos que aún faltan en el sistema, en mi caso Matlab no tenía el archivo, el problema ya no está.

    
respondido por el Robert Hughes 09.10.2011 - 16:25

Lea otras preguntas en las etiquetas