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

20
find | grep libc.so.6

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

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

Erik B
fuente

Respuestas:

22

libc.sose 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 i386y al mismo tiempo para que pueda ejecutar binarios de 32 bits más fácilmente en sistemas de 64 bits y viceversa (y otras situaciones similares). Si el paquete contuviera un enlace simbólico a la nueva ubicación, entonces las versiones de ese paquete para diferentes arquitecturas no serían instalables al mismo tiempo (¿qué versión del enlace simbólico elegiría?), Lo que anularía todo el punto del ejercicio.amd64libclibc6dpkg

Cualquier cosa que codifique la ruta libc.sodebe 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 multiarchetiqueta.

Colin Watson
fuente
1
Buena respuesta, aprendí algo nuevo hoy (otra vez) :)
Lekensteyn
1
El procesador que estoy usando ni siquiera admite instrucciones de 64 bits. ¿Diría que existe algún riesgo asociado con la adición manual de un enlace simbólico? No estoy seguro de que necesite hacer eso, pero si. De todos modos, esta parece ser la respuesta correcta. Gracias.
Erik B
@Erik B: ¿qué? ¿Me estás diciendo que estás tratando de usar una aplicación de 64 en un procesador de 32 bits? Eso definitivamente no va a funcionar. Las aplicaciones de 32 bits funcionan bien en un procesador de 64 bits, pero no al revés.
Lekensteyn
@Lekensteyn eso definitivamente no es lo que estoy diciendo. Lo que digo es que no tengo uso para la biblioteca de 64 bits. Entonces, en mi sistema en particular, no habrá ninguna confusión sobre si /lib/libc.so.6es la biblioteca de 32 o 64 bits.
Erik B
3
Si nunca va a usar paquetes de 64 bits, dudo que haya un riesgo significativo al agregar un enlace simbólico, no.
Colin Watson
10

El núcleo carga las bibliotecas dinámicas, las rutas no están codificadas en un programa. Un programa solo dice "Necesito libc.so.6". Luego, el sistema busca en las rutas de la biblioteca como se define en /etc/ld.so.conf, incluyendo /usr/liby /libpor defecto. Este archivo incluye archivos de configuración adicionales en /etc/ld.so.conf.d.

En mi sistema de 64 bits, libc.so.6se puede encontrar en /lib/x86_64-linux-gnu/libc.so.6debido 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 averiguar qué biblioteca carga un programa, use lddcomo 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)

Poner el enlace simbólico no rompería nada.

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

ldconfig -v -N | grep '^/'

-vhace que se muestre una lista de archivos + directorios, -Nevita que se vuelva /etc/ld.so.cachea crear el caché ( ).

Lekensteyn
fuente
Poner el enlace simbólico no rompería nada, pero tampoco haría nada bueno, ¿verdad?
Erik B
@Erik B: ¿a qué programa / script te refieres? Puedo entender que un script se confunde porque el camino está codificado. Pero un programa no tiene que conocer el camino.
Lekensteyn 05 de
¿Así es como funciona? Parece que a veces tengo problemas en los que los programas no pueden encontrar bibliotecas instaladas /usr/local/lib, pero funcionan bien si hago un enlace simbólico desde /usr/lib. ¿Qué causa este comportamiento?
crazy2be
@ crazy2be: ¿puedes publicar la salida de ldconfig -v -N | grep '^/'?
Lekensteyn
@Lekensteyn: Claro: pastebin.com/dtfnw2Tv . Sin embargo, ha sucedido con algunos programas en casi cualquier sistema que haya usado, así que supuse que no estaba relacionado con la configuración del sistema.
crazy2be
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 faltan todavía en el sistema, en mi caso Matlab no tenía el archivo, el problema se ha ido ahora.

Robert Hughes
fuente