En mi laptop
$ cat /etc/issue
Ubuntu 18.04 LTS \n \l
Hay dos carpetas diferentes para bibliotecas x86
y x86_64
:
~$ ls -1 /
bin
lib
lib64
sbin
...
¿Por qué para binarios existe un solo directorio?
PD: También estoy interesado en Android, pero espero que la respuesta sea la misma.
linux
android
architecture
Gluttton
fuente
fuente
/bin
y/sbin
allí. ¿Cuál es la pregunta? ¿Estás preguntando sobre la diferencia entre/lib
y/lib64
?x86_64
(ni para/bin
no para/sbin
)./bin64
.wine*32
ywine*64
).Respuestas:
Primero, por qué hay por separado
/lib
y/lib64
:El estándar de jerarquía del sistema de archivos menciona que se separan
/lib
y/lib64
existen porque:En mi Slackware 14.2, por ejemplo, existen
/lib
y/lib64
directorios de bibliotecas de 32 bits y 64 bits, respectivamente, a pesar de que/lib
no es como un enlace simbólico como los FHS snippet sugeriría:Hay dos
libc.so.6
bibliotecas en/lib
y/lib64
.Cada binario ELF construido dinámicamente contiene una ruta codificada al intérprete, en este caso,
/lib/ld-linux.so.2
o/lib64/ld-linux-x86-64.so.2
:El trabajo del intérprete es cargar las bibliotecas compartidas necesarias. Puede preguntarle a un intérprete de GNU qué bibliotecas cargaría sin siquiera ejecutar un binario usando
LD_TRACE_LOADED_OBJECTS=1
o unldd
contenedor:Como puede ver, un intérprete determinado sabe exactamente dónde buscar bibliotecas: la versión de 32 bits busca bibliotecas
/lib
y la versión de 64 bits busca bibliotecas/lib64
.El estándar FHS dice lo siguiente sobre
/bin
:OMI la razón por la cual no existen por separado
/bin
y/bin64
es que si tuviéramos el archivo con el mismo nombre en ambos directorios que no podíamos llamar a uno de ellos indirectamente, porque tendríamos que poner/bin
o/bin64
por primera vez en$PATH
.Sin embargo, tenga en cuenta que lo anterior es solo la convención: al kernel de Linux realmente no le importa si tiene separado
/bin
y/bin64
. Si los desea, puede crearlos y configurar su sistema en consecuencia.También mencionó Android: tenga en cuenta que, excepto para ejecutar un kernel de Linux modificado, no tiene nada que ver con sistemas GNU como Ubuntu: sin glibc, sin bash (de forma predeterminada, por supuesto, puede compilarlo e implementarlo manualmente), y también la estructura de directorios Es completamente diferente.
fuente
ls -l
ejemplos no son particularmente relevantes. Lo que sería útil es la salida dels -l /lib /lib64
, que probablemente muestra que/lib
sí mismo es un enlace simbólico.ls -ld
, y no,/lib
no es un enlace simbólico en miSlackware 14.2
sistema.dfd029d25c58831bc5db671aec99a36f /lib64/libc.so.6
,987e7b736f316cc8da87ca2f38dae93e /lib/libc.so.6
.La razón es que los directorios lib / lib64 pueden contener archivos que tienen el mismo nombre porque son bibliotecas compartidas con diversos programas. Ponerlos en directorios separados resuelve el conflicto. No hay (por lo general ...) una buena razón para distribuir ejecutables con el mismo nombre en el mismo sistema que son de 32/64 bits, pero dado que puede haber una mezcla de ejecutables, se deben proporcionar las bibliotecas compartidas.
fuente