He descargado un juego (Shank) pero el archivo bin no se ejecuta. El error que se muestra cuando intento iniciar el ejecutable es:
bash: ./shank-linux-120720110-1-bin: No such file or directory
He descargado un juego (Shank) pero el archivo bin no se ejecuta. El error que se muestra cuando intento iniciar el ejecutable es:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Respuestas:
Probablemente esté intentando ejecutar un binario de 32 bits en un sistema de 64 bits que no tiene instalado soporte de 32 bits.
Hay tres casos en los que puede obtener el mensaje "No existe tal archivo o directorio":
file shank-linux-120720110-1-bin
muestra algo así como "ELF ejecutable LSB de 32 bits ...") y, sin embargo, cuando intenta ejecutarlo, le dicen que el archivo no existe.El mensaje de error en este último caso es ciertamente confuso. Lo que le dice es que falta un componente clave del entorno de tiempo de ejecución necesario para ejecutar el programa. Desafortunadamente, el canal a través del cual se informa el error solo tiene espacio para el código de error y no para esta información adicional de que realmente es el entorno de tiempo de ejecución el culpable. Si desea la versión técnica de esta explicación, lea Obtener el mensaje "No encontrado" cuando ejecute un binario de 32 bits en un sistema de 64 bits .
El file
comando le dirá exactamente qué es este binario. Con algunas excepciones, solo puede ejecutar un binario para la arquitectura del procesador para el que es su versión de Ubuntu. La principal excepción es que puede ejecutar binarios de 32 bits (x86, también conocido como IA32) en sistemas de 64 bits (amd64, también conocido como x86_64).
En Ubuntu hasta 11.04, para ejecutar un binario de 32 bits en una instalación de 64 bits, debe instalar el ia32-libs
paquete . Es posible que deba instalar bibliotecas adicionales (si lo hace, recibirá un mensaje de error explícito).
Desde que 11.10 ( oneiric ) introdujo el soporte multiarch , aún puede instalar ia32-libs
, pero puede elegir un enfoque más detallado, es suficiente para obtener (además de cualquier otra biblioteca necesaria).libc6-i386
ldd
para verificar si le falta una biblioteca. ldd kgio_ext.so
podría decir algo como libruby.so.2.3 => not found
entre otros
bash: ...some...path...: No such file or directory
puede aparecer: después de mover el archivo ejecutable. Bash parece almacenar en caché las rutas a los ejecutables que se encuentran en $ PATH; corre hash -r
para despejarlo. Ver: unix.stackexchange.com/a/5610/11352
Sigue esta respuesta solo si la salida de los file file-name
shows,
file-name: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
Para ejecutar el archivo ejecutable de 32 bits en un sistema Ubuntu múltiples arquitecturas de 64 bits, hay que añadir i386
la arquitectura y también hay que instalar libc6:i386
, libncurses5:i386
, libstdc++6:i386
estos tres paquetes de bibliotecas.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
Al instalar el deb para 32 bits, me di cuenta de que me faltaban algunas bibliotecas (además de ia32-libs y libc6). Primero resolví este problema dando este comando:
sudo apt-get install -f
Entonces recibí otro error:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Obviamente, estas bibliotecas se instalaron correctamente. Sin entrar en detalles, tuve que vincular las bibliotecas a mano. Entonces me di cuenta de que también podría ser una solución más fácil a través de Synaptic instalar los siguientes paquetes:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Después de eso, el siguiente problema fue la pantalla negra durante la reproducción, que resolví reemplazando el ejecutable en / Shank / bin con esto: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Espero que sea útil para alguien. Si necesita más ayuda o más detalles, no dude en ponerse en contacto conmigo.
Aquí hay una transcripción que muestra un poco más sobre la naturaleza del problema y cómo solucionarlo a partir de Ubuntu 16.04. Tenga en cuenta que aunque los file
informes están "vinculados dinámicamente", los ldd
informes "no son un ejecutable dinámico".
$ ./myprogram
bash: myprogram: No such file or directory
$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped
$ ldd myprogram
not a dynamic executable
Una vez que instala libc6: i386, las cosas comienzan a mejorar ...
$ sudo apt-get install libc6:i386 # the initial fix
...
$ ldd myprogram
linux-gate.so.1 => (0xf77fd000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
/lib/ld-linux.so.2 (0x56578000)
$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Para completar el trabajo, es posible que deba identificar e instalar bibliotecas adicionales de una en una ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
No sé si hay una forma sistemática de identificar las bibliotecas correctas para instalar. Hay un poco de conjeturas que asignan los mensajes de error a los nombres de los paquetes (la finalización de la pestaña ayuda).
ldd
(incorrectamente) informa "no es un ejecutable dinámico".
Para ampliar la respuesta de @Gilles, hay al menos tres escenarios que resultan en este error:
file
comando funciona), lo que genera un mensaje de error desconcertante. Esto puede significar que hay un problema con el cargador.Categorías de problemas del cargador:
El cargador de un ejecutable no existe. Puede verificar esto usando el comando de archivo y ver si el cargador existe. P.ej
file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
Aviso interpreter /lib64/ld-lsb-x86-64.so.3
; Si este archivo no existe, debe instalarlo. Para este cargador en particular en 16.04, la respuesta resultó ser sudo apt-get install lsb
.
Problemas con el cargador de un script (ver esta respuesta ).
ldd <file-name>
para buscar bibliotecas "no encontradas". Vea esta respuesta para más información.El cargador que no existe podría deberse a una falta de coincidencia de 32/64 bits o alguna otra razón. Puede haber otros tipos de errores de cargador que no conozco.
file lmutil
no mostré el intérprete, pero lo ldd
hice, y la instalación lsb
resolvió el problema.