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í?
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.
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:
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:
/lib/libc.so.6
es la biblioteca de 32 o 64 bits.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/lib
y/lib
por defecto. 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
:Para averiguar qué biblioteca carga un programa, use
ldd
como enldd /bin/bash
:Poner el enlace simbólico no rompería nada.
Para obtener una lista de los directorios que se buscan, ejecute:
-v
hace que se muestre una lista de archivos + directorios,-N
evita que se vuelva/etc/ld.so.cache
a crear el caché ( ).fuente
/usr/local/lib
, pero funcionan bien si hago un enlace simbólico desde/usr/lib
. ¿Qué causa este comportamiento?ldconfig -v -N | grep '^/'
?Simplemente agregue el enlace simbólico al archivo libc.so.6 de la siguiente manera:
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.
fuente