Exécuter une application 64 bits sur un système Ubuntu 32 bits

10

Toutes les questions que j'ai vues se réfèrent à l'exécution d'une application 32 bits dans un système 64 bits.

J'utilise Ubuntu 12.04 32 bits (en fait OS Luna élémentaire, qui est basé sur lui) et j'essaie d'exécuter une application 64 bits qui refuse d'ouvrir. Fonctionnement:

./64bit_app.run

(où 64bit_app.runest l'application 64 bits que j'essaie d'exécuter) entraîne:

bash: ./64bit_app.run: no se puede ejecutar el fichero binario

qui se traduit par " ne peut pas exécuter / exécuter / ouvrir un fichier binaire ".

Dois-je être capable de l'exécuter? Est-il possible d'exécuter une application 64 bits dans un système 32 bits? Si c'est le cas, comment?

Gabriel
la source
Je n'ai pas essayé cela, mais avez-vous essayé les solutions présentées ici , en particulier la réponse expliquant dpkg --add-architecture? Pour autant que je sache, la même approche devrait fonctionner pour 32 sur 64 et pour 64 sur 32. Changez simplement dpkg --add-architecture i386en dpkg --add-architecture amd64.
terdon
1
vous faire avoir du matériel 64 bits, non? (juste pour être sûr)
Strugee
"qui refuse d'ouvrir"? de quelle façon précisément?
Braiam
1
Veuillez lire les réponses à la question à laquelle j'ai lié , vous devez d' sudo dpkg --add-architecture amd64abord exécuter . C'est une commande distincte.
terdon
1
@terdon désolé, je n'ai pas compris ça. L'exécution de cette ligne entraîne: dpkg: error: opción --add-architecture desconocidaoù se desconocidatraduit unknown.
Gabriel

Réponses:

8

Vous ne pouvez pas faire cela directement sur Linux sur x86_64 avec un noyau 32 bits. Vous avez besoin d'un noyau 64 bits pour pouvoir exécuter du code 64 bits. (Remarque: noyau. Vous pouvez avoir un espace utilisateur 32 bits fonctionnant sur un noyau 64 bits et installer la prise en charge des binaires 64 bits. La facilité de cette opération dépend de la distribution. Exemple ici pour Debian.)

Certains logiciels de virtualisation sont capables de le faire (avec des restrictions sur le type de CPU que vous utilisez), et les émulateurs peuvent aussi le faire. Mais pour l'exécuter nativement, vous aurez besoin d'un noyau 64 bits.

Étant donné que la plupart des distributions 64 bits ont un support 32 bits (par défaut ou installable), c'est ce que vous devriez utiliser si vous devez exécuter des binaires 64 bits et 32 ​​bits sur le même système d'exploitation.

Tapis
la source
7

Étendre la réponse de @Mat:

Oui, certains logiciels de virtualisation peuvent le faire. Le principal obstacle à gérer est que dans un environnement 32 bits, les fonctionnalités 64 bits du CPU ne sont pas disponibles, ainsi que les fonctionnalités d'un noyau 64 bits ne sont pas disponibles. Il en est de même si votre CPU prend en charge 64 bits (depuis environ 2003, tous les ont).

Votre question indique implicitement que vous souhaitez exécuter l'application 64 bits dans votre propre environnement système. Si c'est vraiment votre intention, cela exclut toutes les solutions basées sur des machines virtuelles. Le seul qui reste connu pour moi est l'émulation du noyau du qemu. Donc:

qemu-x86_64 ./your_64bit_app

Il exécute votre application sur votre système actuel, avec votre noyau actuel, avec vos variables d'environnement actuelles . Bien sûr, ce n'est pas très rapide, il faut émuler votre processeur.

Il ne peut émuler que des applications Linux x86-64.

peterh - Réintégrer Monica
la source
Quelque part, j'ai également lu, comme si vmware pouvait aussi le faire, mais ce n'est pas assez d'informations sûres pour une réponse. Les vmwares Afaik récents ne sont que 64 bits côté hôte.
peterh
1

La plupart des architectures 64 bits sont des extensions des architectures 32 bits. Ils sont plus récents et complètement différents, de sorte qu'une architecture 32 bits n'a évidemment aucune idée de ce qu'est l'équivalent 64 bits. Ils ne savent pas quelles sont les nouvelles fonctionnalités, quels sont les nouveaux registres ... Même s'ils le savent, ils n'ont pas accès aux nouveaux registres et fonctionnalités. Par conséquent, un noyau 32 bits ne peut pas enregistrer des contextes 64 bits. Tout cela rend impossible l'exécution d'applications 64 bits sur un système 32 bits.

Un noyau 32 bits prenant en charge 64 bits soigneusement conçu peut exécuter des applications 64 bits, mais il a encore besoin de code 64 bits pour faire des économies de contexte, ce qui ne fait plus d'un noyau 32 bits pur.

Vous pouvez exécuter un système d'exploitation 64 bits dans un émulateur ou une machine virtuelle invitée 64 bits dans un hôte 32 bits avec VT-x. Mais techniquement, vous utilisez un système 64 bits différent. Il n'est toujours pas possible d'exécuter du code 64 bits directement sur le noyau Linux 32 bits

phuclv
la source