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

15

Eu tenho um aplicativo que existe apenas uma versão de 32 bits. Para usá-lo, eu costumava pressionar 2& 3juntos antes de inicializar o Mac, para que ele funcione no modo 32 bits. No entanto, alguns aplicativos (versão de 64 bits que foi instalada anteriormente) sempre travam 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 executableerro. Eu verifiquei a permissão do arquivo e ela mostrou drwxrwxr-x, deve ser executável, não é?
Edição : Como @ gd1 disse, theApp.app é uma pasta (é chamada de pacote no OSX, eu acho) e, portanto, não é executável.

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


EDIT : Eu posso abrir o aplicativo archagora com o comando (obrigado @GordonDavisson):

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

No entanto, o aplicativo é executado com Components losterro, 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 ..) é usado para se conectar à rede na minha universidade na China.


EDIT :

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 é apenas de 32 bits e depende do kernel de 32 bits. Estou tão triste. :(


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

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

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

O software de terceiros (como um mecanismo de virtualização) ou o hardware (como uma placa PCIe) que depende de uma extensão do kernel compatível com o Mac OS X Server v10.5 pode não funcionar em Macs que usam o kernel de 64 bits no Mac OS X v10.6. Entre em contato com o fornecedor do software ou hardware para obter uma extensão atualizada do kernel que funcione com o kernel de 64 bits no Mac OS X Server v10.6.

Como solução alternativa, você pode iniciar temporariamente o kernel de 32 bits para usar extensões mais antigas do kernel para seu software ou hardware de terceiros.

Kjuly
fonte
Qual versão do OS X?
Skub
@skub 10.7.2. :)
Kjuly
11
Não conheço o OSX muito bem, mas suponho que "arch" espere que um executável seja dado como argumento e theApp.app seja uma pasta (como você pode ver, tem a letra 'd' na frente, na início da cadeia de permissões). Serach para o executável dentro , eu acredito em "Conteúdo> MacOS"
GD1
@ gd1 ya, você está certo! Agora eu me pergunto como executá-lo no modo de 32 bits. :)
Kjuly

Respostas:

19

O OS X não possui um modo geral de 64/32 bits; executa programas individuais em qualquer modo que pareça "melhor" quando eles são iniciados. Manter 3e 2enquanto o computador inicializa fará com que seu kernel seja executado no modo de 32 bits, mas isso não tem nada a ver com o modo em que os programas são executados. O OS X pode 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 algo especial. Você pode verificar isso executando o filecomando 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") código e o Adobe Reader inclui apenas código Intel de 32 bits.

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

Se um aplicativo tiver código de 32 e 64 bits, você poderá selecionar qual 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 archcomando no executável (por exemplo arch -i386 /Applications/theApp.app/Contents/MacOS/theApp). Mas você normalmente não precisa fazer isso, o sistema operacional 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ê possui um aplicativo de 32 e 64 bits, mas precisa ser capaz de carregar um plug-in ou biblioteca apenas de 32 bits, terá para forçar o programa a executar no modo de 32 bits.)

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

EDIT: parece que o aplicativo é apenas de 32 bits e instala uma extensão de kernel de 32 bits (kext). Enquanto a parte do aplicativo de 32 bits pode ser executada em qualquer modo do kernel, os kexts de 32 bits podem carregar apenas em um kernel de 32 bits (é como um plug-in para o kernel). Você pode executar o kernel no modo de 32 bits mantendo pressionado 3e 2na inicialização ou permanentemente com o comando sudo systemsetup -setkernelbootarchitecture i386(consulte o KB # HT3773 da Apple ).

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

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

Gordon Davisson
fonte
"One instance where you would need to manually override the mode selection is for plugin or library compatibility"Nesse caso, é necessário executar meu aplicativo apenas no modo de 32 bits. O programa que sempre falha é MS Word(eu uso o LaTeX agora), não tenho certeza se o modo de 32 bits causa ou não a falha, apenas um palpite pessoal. E arch -i386 /Applications/theApp.app/Contents/MacOS/theAppé o que eu quero! Vou tentar então! Obrigado!! : D
Kjuly
Infelizmente, falhou com Components losterro. :( Eu colar o log aos meus Q. Obrigado antecipadamente!
Kjuly
11
Esse registro indica que está a tentar carregar uma extensão de kernel (.kext), o que significa que o modo kernel faz matéria (é basicamente como um kernel plugin), e a "arquitetura solicitado / executável não encontrado" bit sugere que ele não suporta o modo em que o kernel está sendo executado. Primeiro, eu descobriria quais modos o kext possui com algo parecido file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(ou pode ser em /Applications/Èó■ËÆØ.app/xlpppoe.kext). Se for apenas de 32 bits, você precisará iniciar o kernel no modo de 32 bits (veja aqui ).
Gordon Davisson
Olá @Gordon, coloquei as informações na minha pergunta. Talvez você possa usar minha última parte como parte de sua resposta. : p Obrigado mesmo assim !!
Kjuly