Como posso executar um aplicativo de 32 bits no OSX 10.7.2 de 64 bits?

15

Eu tenho um aplicativo que só existe uma versão de 32 bits. Para usá-lo, eu costumava pressionar 2 & 3 juntos antes de inicializar o Mac, então ele vai rodar no modo de 32 bits. No entanto, alguns aplicativos (versão de 64 bits instalada anteriormente) sempre falharão nesse modo.

Por acaso, vi uma solução que executa o aplicativo de 32 bits no sistema de 64 bits:

arch -i386 theApp.app

Mas eu tentei com arch: /Applications/theApp.app isn't executable error. Eu verifiquei a permissão de arquivo e ele mostrou drwxrwxr-x , ele deve ser executável, uh?
EDITAR : Como @ gd1 disse, o App.app é uma pasta (é chamado de pacote no OSX eu acho ) e por isso não é executável.

Mas ainda preciso de uma solução alternativa:
Como posso executar meu aplicativo de 32 bits no meu sistema de 64 bits corretamente?

EDITAR : Eu posso abrir o aplicativo com arch agora com o comando (obrigado @GordonDavisson):

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

No entanto, o aplicativo é executado com Components lost error, log mostrado abaixo:

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, o 闪讯.app (eu odeio !! Mas eu preciso disso ..) é usado para se conectar à rede na minha universidade na China.

EDITAR :

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

Parece que são apenas 32 bits e & depende do kernel de 32 bits. Estou tão triste. : (

Aqui estão algumas informações que recebi com a ajuda do @GordonDavisson, talvez alguém mais precise.

O DOC mostra alguns métodos para iniciar temporariamente o kernel de 32 bits para usar extensões de kernel antigas para o terceiro software ou hardware de terceiros.

E é sobre "Compatibilidade com o kernel de 64 bits" :

Third-party software (such as a virtualization engine) or hardware (such as a PCIe card) that relies on a kernel extension which was compatible with Mac OS X Server v10.5 may not work on Macs that use the 64-bit kernel in Mac OS X v10.6. Contact the software or hardware vendor for an updated kernel extension that works with the 64-bit kernel in Mac OS X Server v10.6.

As a workaround, you can temporarily start up with the 32-bit kernel to use older kernel extensions for your third-party software or hardware.

    
por Kjuly 08.01.2012 / 06:04

1 resposta

18

O OS X não possui um modo geral de 64/32 bits; Ele executa programas individuais em qualquer modo que pareça "melhor" quando eles são iniciados. Manter 3 e 2 enquanto o computador inicializa fará com que seu kernel seja executado no modo de 32 bits, mas isso não tem nada a ver com que modo os programas são executados. executar programas no modo de 32 bits em um kernel de 64 bits ou programas no modo de 64 bits em um kernel de 32 bits.

Se o seu programa incluir apenas código de 32 bits, ele será executado no modo de 32 bits sem que você precise fazer nada de especial. Você pode verificar isso executando o comando file no executável (geralmente em AppName.app/Contents/MacOS/AppName. Aqui estão alguns exemplos:

$ 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

... que me diz que o Chess.app inclui código Intel de 32 e 64 bits ("i386" e "x86_64", respectivamente), o VLC.app inclui Intel de 32 bits e PowerPC de 32 bits (" ppc "), e o Adobe Reader inclui apenas o código Intel de 32 bits.

Você também pode obter algumas dessas informações (embora não em detalhes tão explícitos) no relatório de sistema do System Information (na seção Software - > Applications).

Se um aplicativo tiver código de 32 e 64 bits, você poderá selecionar qual deles usar na janela Obter Informações do Finder para o aplicativo (haverá uma caixa de seleção "Abrir no modo de 32 bits") ou usando o comando arch no executável (por exemplo, arch -i386 /Applications/theApp.app/Contents/MacOS/theApp ). Mas você normalmente não deveria precisar fazer isso, o SO faz um bom trabalho ao escolher o melhor modo.

(Uma instância em que você precisaria substituir manualmente a seleção de modo é para compatibilidade de plug-in ou biblioteca. Se você tiver um aplicativo de 32 e 64 bits, ele precisará carregar um plug-in ou biblioteca somente de 32 bits , você terá que forçar o programa a ser executado no modo de 32 bits.)

Se você tem programas de 64 bits que não rodam diretamente sob um kernel de 32 bits, eles têm algum tipo de bug estranho, ou há algo ainda mais estranho acontecendo. Se você der os detalhes específicos, poderemos descobrir o que realmente está dando errado.

EDIT: Parece que o aplicativo é somente de 32 bits e instala uma extensão de kernel de apenas 32 bits (kext). Enquanto a parte do aplicativo de 32 bits pode ser executada em qualquer modo kernel, os kexts de 32 bits só podem ser carregados em um kernel de 32 bits (é como um plugin para o kernel). Você pode executar o kernel no modo de 32 bits mantendo 3 e 2 na inicialização, ou permanentemente com o comando sudo systemsetup -setkernelbootarchitecture i386 (veja KB # HT3773 ).

Observe que não é necessário fazer nada de especial para abrir o aplicativo no modo de 32 bits; já que esse é o único formato incluído, ele será executado nesse modo, não importando como ele é lançado (em particular, o comando arch não é necessário ).

Se você tem aplicativos de 64 bits que não são executados adequadamente em um kernel de 32 bits, isso é um problema separado e eu recomendo postar outra pergunta sobre isso.

    
por 08.01.2012 / 08:56