Wie kann ich eine 32-Bit-App unter 64-Bit-OSX 10.7.2 ausführen?


15

Ich habe eine App, die nur eine 32bit Version gibt. Um es zu benutzen, habe ich vor dem Booten des Mac 2& 3gedrückt, damit es im 32-Bit-Modus läuft. Einige Apps (64-Bit-Version, die zuvor installiert wurde) stürzen in diesem Modus jedoch immer ab.

Ich habe zufällig eine Lösung gefunden, die eine 32-Bit-App im 64-Bit-System ausführt:

arch -i386 theApp.app

Aber ich habe es mit arch: /Applications/theApp.app isn't executableFehler versucht . Ich habe die Dateiberechtigung überprüft und festgestellt drwxrwxr-x, dass sie ausführbar sein sollte.
EDIT : Wie @ gd1 sagte theApp.app ein Ordner ist (es heißt Bündel in OSX glaube ich) und so ist es nicht ausführbar.

Aber ich brauche noch eine Problemumgehung:
Wie kann ich meine 32-Bit-App in meinem 64-Bit-System korrekt ausführen?


EDIT : Ich kann die App archjetzt mit dem Befehl öffnen (danke @GordonDavisson):

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

Die App wird jedoch mit dem folgenden Components lostProtokoll ausgeführt:

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).

Übrigens, das 闪讯.app(ich hasse es !! Aber ich brauche es ..) wird verwendet, um eine Verbindung zu einem Netzwerk an meiner Universität in China herzustellen.


EDIT :

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

und

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

Es scheint, dass es nur 32-Bit ist und vom 32-Bit-Kernel abhängt. Oh, ich bin sooo traurig. :(


Hier sind einige Infos, die ich mit Hilfe von @GordonDavisson bekommen habe, vielleicht braucht es jemand anderes.

Das DOC zeigt einige Methoden zum vorübergehenden Starten mit dem 32-Bit-Kernel, um ältere Kernel-Erweiterungen für die Software oder Hardware von Drittanbietern zu verwenden.

Und es geht um "Kompatibilität mit dem 64-Bit-Kernel" :

Software von Drittanbietern (z. B. ein Virtualisierungsmodul) oder Hardware (z. B. eine PCIe-Karte), die auf einer mit Mac OS X Server 10.5 kompatiblen Kernel-Erweiterung basiert, funktionieren möglicherweise nicht auf Macs, die den 64-Bit-Kernel verwenden Mac OS X 10.6. Wenden Sie sich an den Hersteller der Software oder Hardware, um eine aktualisierte Kernel-Erweiterung zu erhalten, die mit dem 64-Bit-Kernel in Mac OS X Server 10.6 kompatibel ist.

Um dieses Problem zu umgehen, können Sie vorübergehend den 32-Bit-Kernel starten, um ältere Kernel-Erweiterungen für Ihre Software oder Hardware von Drittanbietern zu verwenden.


Welche Version von OS X?
Skub

@skub 10.7.2. :)
Kjuly

1
Ich kenne OSX nicht sehr gut, aber ich nehme an, dass "arch" erwartet, dass eine ausführbare Datei als Argument angegeben wird, und theApp.app ist ein Ordner (wie Sie sehen können, hat er den Buchstaben "d" im Vordergrund) Anfang der Berechtigungszeichenfolge). Serach für die ausführbare Datei innerhalb es, glaube ich unter „Inhalt> MacOS“
gd1

@ gd1 ya, du hast recht! Jetzt frage ich mich, wie ich es im 32-Bit-Modus ausführen soll. :)
Kjuly

Antworten:


19

OS X verfügt nicht über einen 64/32-Bit-Modus. Es führt einzelne Programme in dem Modus aus, der beim Start als "am besten" erscheint. Wenn Sie 3und 2gedrückt halten, wird der Kernel beim Starten des Computers im 32-Bit-Modus ausgeführt. Dies hat jedoch nichts mit dem Modus zu tun, in dem Programme ausgeführt werden. OS X kann problemlos Programme im 32-Bit-Modus unter einem 64-Bit-Kernel oder Programmen ausführen im 64-Bit-Modus unter einem 32-Bit-Kernel.

Wenn Ihr Programm nur 32-Bit-Code enthält, wird es im 32-Bit-Modus ausgeführt, ohne dass Sie etwas Besonderes tun müssen. Sie können dies überprüfen, indem Sie den fileBefehl für die ausführbare Datei ausführen (im Allgemeinen in AppName.app/Contents/MacOS/AppName. Hier einige Beispiele:

$ 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

... was mir sagt, dass Chess.app 32-Bit- und 64-Bit-Intel-Code enthält ("i386" bzw. "x86_64"), VLC.app 32-Bit-Intel und 32-Bit-PowerPC ("ppc") Code und Adobe Reader enthält nur 32-Bit-Intel-Code.

Einige dieser Informationen (wenn auch nicht so ausführlich) können Sie auch aus dem Systembericht von System Information (im Abschnitt Software -> Anwendungen) abrufen.

Wenn eine App sowohl 32- als auch 64-Bit-Code enthält, können Sie im Fenster "Informationen" des Finders auswählen, welcher Code für die App verwendet werden soll (es wird ein Kontrollkästchen "Im 32-Bit-Modus öffnen" angezeigt), oder Sie verwenden das archBefehl auf der ausführbaren Datei (zB arch -i386 /Applications/theApp.app/Contents/MacOS/theApp). Normalerweise sollte dies jedoch nicht erforderlich sein, da das Betriebssystem den besten Modus gut auswählt.

(Ein Fall, in dem Sie die Modusauswahl manuell außer Kraft setzen müssten, ist aus Gründen der Plugin- oder Bibliothekskompatibilität. Wenn Sie eine 32- und 64-Bit-App haben, aber nur ein 32-Bit-Plugin oder eine 32-Bit-Bibliothek laden können müssen, müssen Sie um die Ausführung des Programms im 32-Bit-Modus zu erzwingen.)

Wenn Sie 64-Bit-Programme haben, die nicht direkt unter einem 32-Bit-Kernel ausgeführt werden, haben sie entweder einen seltsamen Fehler, oder es passiert etwas, das noch seltsamer ist. Wenn Sie die spezifischen Details angeben, können wir möglicherweise herausfinden, was tatsächlich falsch läuft.

BEARBEITEN: Es sieht so aus, als wäre die App nur 32-Bit und installiert eine 32-Bit-Kernel-Erweiterung (kext). Während der 32-Bit-App-Teil in jedem Kernel-Modus ausgeführt werden kann, können die 32-Bit-Texte nur in einen 32-Bit-Kernel geladen werden (es ist wie ein Plugin für den Kernel). Sie können den Kernel im 32-Bit-Modus ausführen, indem Sie gedrückt halten 3und 2beim Start oder permanent mit dem Befehl sudo systemsetup -setkernelbootarchitecture i386(siehe Apples KB # HT3773 ).

Beachten Sie, dass Sie keine besonderen Maßnahmen ergreifen müssen, um die App im 32-Bit-Modus zu öffnen. Da dies das einzige enthaltene Format ist, wird es in diesem Modus ausgeführt, unabhängig davon, wie es gestartet wird (insbesondere ist der archBefehl nicht erforderlich).

Wenn Sie 64-Bit-Apps haben, die unter einem 32-Bit-Kernel nicht ordnungsgemäß ausgeführt werden, handelt es sich um ein separates Problem, und ich würde empfehlen, eine weitere Frage dazu zu stellen.


"One instance where you would need to manually override the mode selection is for plugin or library compatibility"In diesem Fall muss ich meine App möglicherweise nur im 32-Bit-Modus ausführen. Das Programm, das immer abstürzt, ist MS Word(ich verwende jetzt stattdessen LaTeX), ich bin nicht sicher, ob der 32-Bit-Modus den Absturz verursacht oder nicht, nur eine persönliche Vermutung. Und arch -i386 /Applications/theApp.app/Contents/MacOS/theAppdas will ich! Ich werde es dann versuchen! Vielen Dank!! : D
Kjuly

Leider ist es mit Components lostFehler fehlgeschlagen . :( Ich füge das Log in mein Q ein. Danke im Voraus!
Kjuly

1
Das Protokoll gibt es versucht , eine Kernel - Erweiterung (.kext) zu laden, was bedeutet , dass der Kernel - Modus tut Materie (es ist im Grunde wie ein Kernel - Plugin) und die „angeforderte Architektur / ausführbare Datei nicht gefunden“ Bit legt nahe , es bietet keine Unterstützung für die Modus, in dem der Kernel ausgeführt wird. Zuerst würde ich herausfinden, welchen Modus der Kext mit so etwas hat file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(oder er kann stattdessen in /Applications/Èó°ËÆØ.app/xlpppoe.kext sein). Wenn es sich nur um 32-Bit handelt, müssen Sie den Kernel im 32-Bit-Modus starten (siehe hier ).
Gordon Davisson

Hallo @Gordon, ich habe die Info zu meiner Frage gestellt. Vielleicht kannst du meinen letzten Teil als Teil deiner Antwort verwenden. : p Trotzdem danke !!
9.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.