Comment puis-je exécuter une application 32 bits sur OSX 10.7.2 64 bits?


15

J'ai une application qui n'existe que dans une version 32 bits. Pour l'utiliser, j'avais l'habitude d'appuyer sur 2& 3ensemble avant de démarrer le Mac, donc il fonctionnera en mode 32 bits. Cependant, certaines applications (version 64 bits installée précédemment) plantent toujours dans ce mode.

Il m'est arrivé de voir une solution qui exécute une application 32 bits dans un système 64 bits:

arch -i386 theApp.app

Mais j'ai essayé avec arch: /Applications/theApp.app isn't executableerreur. J'ai vérifié l'autorisation du fichier et cela s'est montré drwxrwxr-x, il devrait être exécutable, euh?
EDIT : Comme l'a dit @ gd1, theApp.app est un dossier (il s'appelle bundle dans OSX je pense) et donc il n'est pas exécutable.

Mais j'ai toujours besoin d'une solution:
comment puis-je exécuter correctement mon application 32 bits dans mon système 64 bits?


EDIT : Je peux archmaintenant ouvrir l'application avec la commande (merci @GordonDavisson):

arch -i386 /Applications/theApp.app/Contents/MacOS/theApp

Cependant, l'application s'exécute avec Components losterreur, journal ci-dessous:

Kjuly@MacBook-Pro:/Applications$ arch -i386 闪讯.app/Contents/MacOS/闪讯 
2012-01-08 16:17:53.381 闪讯[472:1107] isActive: ioctl to kernel socket error 2 ,No such file or directory
2012-01-08 16:17:53.436 闪讯[472:1107] The AppPath = /Applications/闪讯.app
2012-01-08 16:17:53.437 闪讯[472:1107] The src path = /Applications/Èó™ËÆØ.app/xlpppoe.kext
2012-01-08 16:17:58.892 闪讯[472:1107] Set Driver Ok...
/tmp/xlpppoe.kext failed to load - (libkern/kext) requested architecture/executable not found; check the system/kernel logs for errors or try kextutil(8).

BTW, le 闪讯.app(je déteste !! mais j'en ai besoin ..) est utilisé pour se connecter au réseau dans mon université en Chine.


MODIFIER :

Kjuly@MacBook-Pro:~$ file /Applications/闪讯.app/Contents/MacOS/闪讯
/Applications/闪讯.app/Contents/MacOS/闪讯: Mach-O executable i386

et

Kjuly@MacBook-Pro:~$ file /Applications/闪讯.app/xlpppoe.kext/Contents/MacOS/xlpppoe
/Applications/闪讯.app/xlpppoe.kext/Contents/MacOS/xlpppoe: Mach-O object i386

Il semble que ce soit uniquement en 32 bits et dépend du noyau 32 bits. Oh, je suis tellement triste. :(


Voici quelques informations que j'ai obtenues avec l'aide de @GordonDavisson, peut-être que quelqu'un d'autre en a besoin.

Le DOC montre certaines méthodes pour démarrer temporairement avec le noyau 32 bits afin d'utiliser des extensions de noyau plus anciennes pour le logiciel ou le matériel tiers.

Et il s'agit de "Compatibilité avec le noyau 64 bits" :

Les logiciels tiers (comme un moteur de virtualisation) ou le matériel (comme une carte PCIe) qui repose sur une extension de noyau compatible avec Mac OS X Server v10.5 peuvent ne pas fonctionner sur les Mac qui utilisent le noyau 64 bits dans Mac OS X v10.6. Contactez le fournisseur de logiciels ou de matériel pour une extension de noyau mise à jour qui fonctionne avec le noyau 64 bits dans Mac OS X Server v10.6.

Pour contourner ce problème, vous pouvez démarrer temporairement avec le noyau 32 bits pour utiliser des extensions de noyau plus anciennes pour votre logiciel ou matériel tiers.


Quelle version d'OS X?
skub

@skub 10.7.2. :)
Kjuly

1
Je ne connais pas très bien OSX, mais je suppose que "arch" s'attend à ce qu'un exécutable soit donné comme argument, et theApp.app est un dossier (comme vous pouvez le voir, il a la lettre 'd' devant au début de la chaîne des autorisations). Serach pour l'exécutable à l' intérieur , je crois sous la rubrique « Sommaire> Mac OS »
gd1

@ gd1 ya, tu as raison! Maintenant, je me demande comment l'exécuter en mode 32 bits. :)
Kjuly

Réponses:


19

OS X n'a ​​pas de mode global 64/32 bits; il exécute des programmes individuels dans le mode qui semble le "meilleur" au démarrage. Tenir 3et 2au démarrage de l'ordinateur fera fonctionner son noyau en mode 32 bits, mais cela n'a rien à voir avec le mode d'exécution des programmes. OS X peut exécuter avec plaisir des programmes en mode 32 bits sous un noyau 64 bits, ou des programmes en mode 64 bits sous un noyau 32 bits.

Si votre programme comprend uniquement du code 32 bits, il s'exécutera en mode 32 bits sans que vous ayez à faire quoi que ce soit de spécial. Vous pouvez le vérifier en exécutant la filecommande sur l'exécutable (généralement dans AppName.app/Contents/MacOS/AppName. Voici quelques exemples:

$ file /Applications/Chess.app/Contents/MacOS/Chess
/Applications/Chess.app/Contents/MacOS/Chess: Mach-O universal binary with 2 architectures
/Applications/Chess.app/Contents/MacOS/Chess (for architecture x86_64): Mach-O 64-bit executable x86_64
/Applications/Chess.app/Contents/MacOS/Chess (for architecture i386):   Mach-O executable i386
$ file /Applications/VLC.app/Contents/MacOS/VLC
/Applications/VLC.app/Contents/MacOS/VLC: Mach-O universal binary with 2 architectures
/Applications/VLC.app/Contents/MacOS/VLC (for architecture i386):   Mach-O executable i386
/Applications/VLC.app/Contents/MacOS/VLC (for architecture ppc):    Mach-O executable ppc
$ file /Applications/Adobe\ Reader\ 9/Adobe\ Reader.app/Contents/MacOS/AdobeReader 
/Applications/Adobe Reader 9/Adobe Reader.app/Contents/MacOS/AdobeReader: Mach-O executable i386

... ce qui me dit que Chess.app comprend du code Intel 32 bits et 64 bits ("i386" et "x86_64", respectivement), VLC.app comprend Intel 32 bits et PowerPC 32 bits ("ppc") et Adobe Reader ne comprend que du code Intel 32 bits.

Vous pouvez également obtenir certaines de ces informations (mais pas de manière aussi explicite) dans le rapport système de System Information (dans la section Software -> Applications).

Si une application possède à la fois du code 32 et 64 bits, vous pouvez sélectionner celui à utiliser dans la fenêtre Get Info du Finder pour l'application (il y aura une case à cocher "Ouvrir en mode 32 bits"), ou en utilisant la archcommande sur l'exécutable (par exemple arch -i386 /Applications/theApp.app/Contents/MacOS/theApp). Mais vous ne devriez normalement pas avoir besoin de faire cela, le système d'exploitation fait un bon travail pour choisir le meilleur mode.

(Un exemple où vous auriez besoin de remplacer manuellement la sélection du mode est pour la compatibilité du plugin ou de la bibliothèque. Si vous avez une application 32 et 64 bits, mais qu'elle doit être capable de charger un plugin ou une bibliothèque 32 bits uniquement, vous aurez pour forcer le programme à s'exécuter en mode 32 bits.)

Si vous avez des programmes 64 bits qui ne fonctionneront pas directement sous un noyau 32 bits, soit ils ont une sorte de bogue bizarre, soit il se passe quelque chose d'encore plus étrange. Si vous donnez les détails spécifiques, nous pourrons peut-être déterminer ce qui ne va pas.

EDIT: Il semble que l'application ne soit que 32 bits et installe une extension de noyau 32 bits uniquement (kext). Alors que la partie d'application 32 bits peut s'exécuter dans n'importe quel mode du noyau, les kexts 32 bits ne peuvent être chargés que dans un noyau 32 bits (c'est comme un plugin pour le noyau). Vous pouvez exécuter le noyau en mode 32 bits en maintenant 3et 2au démarrage, ou en permanence avec la commande sudo systemsetup -setkernelbootarchitecture i386(voir KB # HT3773 d'Apple ).

Notez qu'il ne devrait pas être nécessaire de faire quelque chose de spécial pour ouvrir l'application en mode 32 bits; puisque c'est le seul format inclus, il fonctionnera dans ce mode, peu importe comment il est lancé (en particulier, la archcommande n'est pas nécessaire).

Si vous avez des applications 64 bits qui ne fonctionnent pas correctement sous un noyau 32 bits, c'est un problème distinct et je recommanderais de poster une autre question à ce sujet.


"One instance where you would need to manually override the mode selection is for plugin or library compatibility"cela peut être le cas si je dois exécuter mon application en mode 32 bits uniquement. Le programme qui plante toujours est MS Word(j'utilise LaTeX à la place maintenant), je ne sais pas si le mode 32 bits provoque le crash ou non, juste une supposition personnelle. Et arch -i386 /Applications/theApp.app/Contents/MacOS/theAppc'est ce que je veux! J'essaierai alors! Merci!! : D
Kjuly

Malheureusement, il a échoué avec une Components losterreur. :( Je colle le journal dans mon Q. Merci d'avance!
Kjuly

1
Ce journal indique qu'il essaie de charger une extension du noyau (.kext), ce qui signifie que le mode du noyau est important (c'est essentiellement comme un plugin du noyau), et le bit "architecture / exécutable demandé introuvable" suggère qu'il ne prend pas en charge le mode file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoedans lequel le noyau s'exécute. Premièrement, je découvrirais quels modes le kext a avec quelque chose comme (ou il peut être dans /Applications/Èó✔ËÆØ.app/xlpppoe.kext à la place). S'il s'agit uniquement de 32 bits, vous devrez démarrer le noyau en mode 32 bits (voir ici ).
Gordon Davisson

Bonjour @Gordon, j'ai mis les informations à ma question. Vous pouvez peut-être utiliser ma dernière partie dans le cadre de votre réponse. : p Merci quand même !!
Kjuly
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.