Come posso eseguire un'app a 32 bit su OSX 10.7.2 a 64 bit?


15

Ho un'app che esiste solo una versione a 32 bit. Per usarlo, premevo 2e 3insieme prima di avviare il Mac, quindi funzionerà in modalità 32 bit. Tuttavia, alcune app (versione a 64 bit installata in precedenza) andranno sempre in crash in questa modalità.

Mi è capitato di vedere una soluzione che esegue app a 32 bit nel sistema a 64 bit:

arch -i386 theApp.app

Ma ho provato con arch: /Applications/theApp.app isn't executableerrore. Ho controllato il permesso del file e ha mostrato drwxrwxr-x, dovrebbe essere eseguibile, eh?
EDIT : Come ha detto @ gd1, theApp.app è una cartella (penso che sia chiamata bundle in OSX) e quindi non è eseguibile.

Ma ho ancora bisogno di una soluzione alternativa:
come posso eseguire correttamente la mia app a 32 bit nel mio sistema a 64 bit?


EDIT : posso aprire l'app con archora con il comando (grazie @GordonDavisson):

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

Tuttavia, l'app viene eseguita con Components losterrori, registro mostrato di seguito:

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

A proposito, il 闪讯.app(lo odio !! Ma ne ho bisogno ..) viene utilizzato per connettersi alla rete nella mia università in Cina.


MODIFICA :

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

e

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

Sembra che sia solo a 32 bit e dipende dal kernel a 32 bit. Oh, sono così triste. :(


Ecco alcune informazioni che ho ricevuto con l'aiuto di @GordonDavisson, forse qualcun altro ne ha bisogno.

Il DOC mostra alcuni metodi per l'avvio temporaneo con il kernel a 32 bit per utilizzare estensioni del kernel precedenti per software o hardware di terze parti.

E si tratta di "Compatibilità con il kernel a 64 bit" :

Software di terze parti (come un motore di virtualizzazione) o hardware (come una scheda PCIe) che si basa su un'estensione del kernel compatibile con Mac OS X Server v10.5 potrebbe non funzionare su Mac che utilizzano il kernel a 64 bit in Mac OS X v10.6. Contattare il fornitore del software o dell'hardware per un'estensione del kernel aggiornata che funziona con il kernel a 64 bit in Mac OS X Server v10.6.

Per ovviare al problema, è possibile avviare temporaneamente con il kernel a 32 bit per utilizzare estensioni del kernel precedenti per il software o l'hardware di terze parti.


Quale versione di OS X?
skub

@skub 10.7.2. :)
Kjuly

1
Non conosco molto bene OSX, ma suppongo che "arch" si aspetti che venga dato un eseguibile come argomento e theApp.app è una cartella (come puoi vedere, ha la lettera 'd' davanti al inizio della stringa di autorizzazioni). Serach per l'eseguibile al suo interno , credo in "Contenuti> MacOS"
gd1

@ gd1 ya, hai ragione! Ora mi chiedo come eseguirlo in modalità a 32 bit. :)
Kjuly

Risposte:


19

OS X non ha una modalità complessiva a 64/32 bit; esegue i singoli programmi in qualunque modalità sembri "migliore" all'avvio. Tenere premuto 3e all'avvio 2del computer farà funzionare il suo kernel in modalità 32 bit, ma questo non ha nulla a che fare con la modalità in cui vengono eseguiti i programmi. OS X può eseguire felicemente programmi in modalità 32 bit in un kernel a 64 bit o programmi in modalità 64 bit con un kernel a 32 bit.

Se il tuo programma include solo codice a 32 bit, verrà eseguito in modalità a 32 bit senza che tu debba fare nulla di speciale. Puoi verificarlo eseguendo il filecomando sul file eseguibile (generalmente in AppName.app/Contents/MacOS/AppName. Ecco alcuni esempi:

$ 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

... che mi dice che Chess.app include il codice Intel a 32 e 64 bit ("i386" e "x86_64", rispettivamente), VLC.app include Intel a 32 bit e PowerPC a 32 bit ("ppc") codice e Adobe Reader include solo codice Intel a 32 bit.

È inoltre possibile ottenere alcune di queste informazioni (anche se non in modo esplicito come dettaglio) dal rapporto di sistema Informazioni di sistema (nella sezione Software -> Applicazioni).

Se un'app ha sia il codice a 32 che a 64 bit, puoi selezionare quale utilizzare nella finestra Ottieni informazioni del Finder per l'app (ci sarà una casella di controllo "Apri in modalità a 32 bit"), oppure usando il archcomando sull'eseguibile (ad es arch -i386 /Applications/theApp.app/Contents/MacOS/theApp.). Ma normalmente non dovresti aver bisogno di farlo, il sistema operativo fa un buon lavoro nella scelta della modalità migliore.

(Un'istanza in cui è necessario sovrascrivere manualmente la selezione della modalità è per la compatibilità dei plug-in o delle librerie. Se si dispone di un'app a 32 e 64 bit, ma deve essere in grado di caricare un plug-in o una libreria a soli 32 bit, è necessario per forzare l'esecuzione del programma in modalità a 32 bit.)

Se hai programmi a 64 bit che non funzioneranno esattamente con un kernel a 32 bit, o hanno una sorta di strano bug, o c'è qualcosa di ancora più strano. Se fornisci i dettagli specifici, potremmo essere in grado di capire cosa sta realmente andando storto.

EDIT: Sembra che l'app sia solo a 32 bit e installi un'estensione del kernel (kext) solo a 32 bit. Mentre la parte dell'app a 32 bit può essere eseguita in qualsiasi modalità kernel, i kexts a 32 bit possono essere caricati solo in un kernel a 32 bit (è come un plugin per il kernel). È possibile eseguire il kernel in modalità a 32 bit tenendo premuto 3e 2all'avvio o in modo permanente con il comando sudo systemsetup -setkernelbootarchitecture i386(consultare l'articolo KB # HT3773 di Apple ).

Nota che non dovrebbe essere necessario fare nulla di speciale per aprire l'app in modalità 32 bit; dato che è l'unico formato incluso, verrà eseguito in quella modalità indipendentemente da come viene avviato (in particolare, il archcomando non è necessario).

Se hai app a 64 bit che non funzionano correttamente con un kernel a 32 bit, questo è un problema separato e ti consiglio di postare un'altra domanda a riguardo.


"One instance where you would need to manually override the mode selection is for plugin or library compatibility"questo potrebbe essere il caso in cui ho bisogno di eseguire la mia app solo in modalità a 32 bit. Il programma che va sempre in crash MS Word(io uso LaTeX invece ora), non sono sicuro che la modalità a 32 bit causi il crash o meno, solo un'ipotesi personale. Ed arch -i386 /Applications/theApp.app/Contents/MacOS/theAppè quello che voglio! Allora proverò! Grazie!! : D
Kjuly

Sfortunatamente, fallì Components lost errore. :( Ho incollato il registro sul mio Q. Grazie in anticipo!
Kjuly

1
Questo registro indica che sta cercando di caricare un estensione del kernel (.kext), il che significa che la modalità kernel non importa (è fondamentalmente come un kernel plugin), e l ' "architettura richiesto / eseguibile non trovato" po' suggerisce che non supporta il modalità in cui è in esecuzione il kernel. Per prima cosa, vorrei scoprire quali modalità ha il kext con qualcosa del genere file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(o potrebbe essere invece in /Applications/ÈóORMAËÆØ.app/xlpppoe.kext). Se è solo a 32 bit, dovrai avviare il kernel in modalità a 32 bit (vedi qui ).
Gordon Davisson l'

Ciao @Gordon, ho messo le informazioni alla mia domanda. Forse puoi usare la mia ultima parte come parte della tua risposta. : p Grazie comunque !!
Kjuly
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.