Todas las preguntas que he visto se refieren a ejecutar una aplicación de 32 bits en un sistema de 64 bits.
Estoy ejecutando Ubuntu 12.04 de 32 bits (en realidad, OS Luna elemental, que se basa en él) y estoy tratando de ejecutar una aplicación de 64 bits que se niega a abrir. Corriendo:
./64bit_app.run
(donde 64bit_app.run
está la aplicación de 64 bits que estoy tratando de ejecutar) da como resultado:
bash: ./64bit_app.run: no se puede ejecutar el fichero binario
que se traduce como " no se puede ejecutar / ejecutar / abrir archivo binario ".
¿Debería poder ejecutarlo? ¿Es posible ejecutar una aplicación de 64 bits en un sistema de 32 bits? ¿Si es así, cómo?
dpkg --add-architecture
? Hasta donde yo sé, el mismo enfoque debería funcionar para 32 en 64 y para 64 en 32. Simplemente cambiedpkg --add-architecture i386
adpkg --add-architecture amd64
.sudo dpkg --add-architecture amd64
primero. Esa es una orden separada.dpkg: error: opción --add-architecture desconocida
donde sedesconocida
traduce aunknown
.Respuestas:
No puede hacer eso directamente en Linux en x86_64 con un núcleo de 32 bits. Necesita un núcleo de 64 bits para poder ejecutar código de 64 bits. (Nota: kernel. Puede tener una tierra de usuario de 32 bits ejecutándose en un kernel de 64 bits e instalar soporte para binarios de 64 bits. La facilidad de esto depende de la distribución. Ejemplo aquí para Debian).
Algunos software de virtualización pueden hacerlo (con restricciones en el tipo de CPU que está utilizando), y los emuladores también pueden hacerlo. Pero para ejecutarlo de forma nativa necesitarás un núcleo de 64 bits.
Dado que la mayoría de las distribuciones de 64 bits tienen soporte de 32 bits (ya sea de forma predeterminada o instalable), eso es lo que debe usar si necesita ejecutar binarios de 64 bits y 32 bits en el mismo sistema operativo.
fuente
Extendiendo la respuesta de @ Mat:
Sí, algún software de virtualización puede hacerlo. El principal obstáculo para manejar es que en un entorno de 32 bits, las características de 64 bits de la CPU no están disponibles, y tampoco las características de un núcleo de 64 bits. Aún así, si su CPU tiene soporte de 64 bits (desde alrededor de 2003, todos lo tienen).
Su pregunta indica implícitamente que desea ejecutar la aplicación de 64 bits en su propio entorno de sistema. Si realmente es su intención, esto excluye todas las soluciones basadas en máquinas virtuales. Lo único que me queda es la emulación de kernel de qemu. Entonces:
Ejecuta su aplicación en su sistema actual, con su núcleo actual, con sus variables de entorno actuales . Por supuesto que no es muy rápido, tiene que emular tu CPU.
Solo puede emular aplicaciones linux x86-64.
fuente
La mayoría de las arquitecturas de 64 bits son extensiones de las de 32 bits. Son más nuevos y completamente diferentes, por lo que obviamente una arquitectura de 32 bits no tiene idea de cuál es la contraparte de 64 bits. No saben cuáles son las nuevas características, qué nuevos registros hay ... Incluso si lo saben, no tienen acceso a los nuevos registros y características. Como resultado, un núcleo de 32 bits no puede guardar contextos de 64 bits. Todo eso hace que sea imposible ejecutar aplicaciones de 64 bits en un sistema de 32 bits.
Un núcleo de 32 bits cuidadosamente diseñado para 64 bits puede ejecutar aplicaciones de 64 bits, pero aún necesita un código de 64 bits para ahorrar en el contexto, lo que hace que ya no sea un núcleo puro de 32 bits.
Puede ejecutar un sistema operativo de 64 bits dentro de un emulador, o una máquina virtual invitada de 64 bits dentro de un host de 32 bits con VT-x. Pero técnicamente está ejecutando en un sistema diferente de 64 bits. Todavía no es posible ejecutar código de 64 bits directamente en el kernel de Linux de 32 bits
fuente