J'ai une application qui n'existe que dans une version 32 bits. Pour l'utiliser, j'avais l'habitude d'appuyer sur 2
& 3
ensemble 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 executable
erreur. 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 arch
maintenant ouvrir l'application avec la commande (merci @GordonDavisson):
arch -i386 /Applications/theApp.app/Contents/MacOS/theApp
Cependant, l'application s'exécute avec Components lost
erreur, 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.
Réponses:
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
file
commande sur l'exécutable (généralement dans AppName.app/Contents/MacOS/AppName. Voici quelques exemples:... 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
arch
commande sur l'exécutable (par exemplearch -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
arch
commande 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.
la source
"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 estMS 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. Etarch -i386 /Applications/theApp.app/Contents/MacOS/theApp
c'est ce que je veux! J'essaierai alors! Merci!! : DComponents lost
erreur. :( Je colle le journal dans mon Q. Merci d'avance!file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe
dans 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 ).