Todas as perguntas que eu vi referem-se à execução de um aplicativo de 32 bits em um sistema de 64 bits.
Estou executando o Ubuntu 12.04 de 32 bits (na verdade, o OS Luna básico, que é baseado nele) e estou tentando executar um aplicativo de 64 bits que se recusa a abrir. Corrida:
./64bit_app.run
(onde 64bit_app.run
está o aplicativo de 64 bits que estou tentando executar) resulta em:
bash: ./64bit_app.run: no se puede ejecutar el fichero binario
que se traduz em " não é possível executar / executar / abrir arquivo binário ".
Devo ser capaz de executá-lo? É possível executar um aplicativo de 64 bits em um sistema de 32 bits? Se sim, como?
dpkg --add-architecture
? Até onde eu sei, a mesma abordagem deve funcionar para 32 em 64 e para 64 em 32. Basta mudardpkg --add-architecture i386
paradpkg --add-architecture amd64
.sudo dpkg --add-architecture amd64
primeiro. Esse é um comando separado.dpkg: error: opción --add-architecture desconocida
onde édesconocida
traduzidaunknown
.Respostas:
Você não pode fazer isso diretamente no Linux em x86_64 com um kernel de 32 bits. Você precisa de um kernel de 64 bits para poder executar o código de 64 bits. (Nota: kernel. Você pode ter uma área de usuário de 32 bits em execução em um kernel de 64 bits e instalar o suporte para binários de 64 bits. A facilidade com que isso depende da distribuição. Exemplo aqui para o Debian.)
Alguns softwares de virtualização são capazes de fazer isso (com restrições sobre o tipo de CPU que você está usando), e os emuladores também podem fazer isso. Mas para executá-lo nativamente, você precisará de um kernel de 64 bits.
Como a maioria das distribuições de 64 bits disponíveis no mercado tem suporte a 32 bits (por padrão ou instalável), é isso que você deve usar se precisar executar binários de 64 bits e de 32 bits no mesmo sistema operacional.
fonte
Estendendo a resposta de @ Mat:
Sim, alguns softwares de virtualização podem fazer isso. O principal obstáculo a ser resolvido é que, em um ambiente de 32 bits, os recursos de 64 bits da CPU não estão disponíveis e também os recursos de um kernel de 64 bits. Mesmo assim, se sua CPU tiver suporte para 64 bits (desde 2003, todos eles possuem).
Sua pergunta indica implicitamente que você deseja executar o aplicativo de 64 bits em seu próprio ambiente de sistema. Se realmente é sua intenção, isso exclui todas as soluções baseadas em máquinas virtuais. O único restante que é conhecido por mim é a emulação de kernel do qemu. Assim:
Ele executa seu aplicativo em seu sistema atual, com seu kernel atual, com suas variáveis de ambiente atuais . Claro que não é muito rápido, ele tem que emular sua CPU.
Ele pode emular apenas aplicativos linux x86-64.
fonte
A maioria das arquiteturas de 64 bits são extensões para as de 32 bits. Eles são mais novos e completamente diferentes, portanto, obviamente, uma arquitetura de 32 bits não tem idéia do que é a contrapartida de 64 bits. Eles não sabem quais são os novos recursos, quais são os novos registradores ... Mesmo que saibam, eles não têm acesso aos novos registradores e recursos. Como resultado, um kernel de 32 bits não pode salvar contextos de 64 bits. Tudo isso impossibilita a execução de aplicativos de 64 bits em um sistema de 32 bits.
Um kernel de 32 bits com reconhecimento de 64 bits cuidadosamente criado pode executar aplicativos de 64 bits, mas ainda precisa de algum código de 64 bits para fazer a economia de contexto, o que o torna mais um kernel de 32 bits puro.
Você pode executar um sistema operacional de 64 bits em um emulador ou uma máquina virtual convidada de 64 bits em um host de 32 bits com o VT-x. Mas tecnicamente você está executando em um sistema diferente de 64 bits. Ainda não é possível executar o código de 64 bits diretamente no kernel Linux de 32 bits
fonte