¿Cómo puedo ejecutar una aplicación de 32 bits en OSX 10.7.2 de 64 bits?

15

Tengo una aplicación que solo existe una versión de 32 bits. Para usarlo, solía presionar 2& 3juntos antes de arrancar la Mac, por lo que se ejecutará en modo de 32 bits. Sin embargo, algunas aplicaciones (la versión de 64 bits que se instaló antes) siempre se bloquean en este modo.

Me pasó a ver una solución que aplicación de ejecución de 32 bits en el sistema de 64 bits:

arch -i386 theApp.app

Pero lo intenté con arch: /Applications/theApp.app isn't executableerror. Revisé el permiso del archivo y se muestra drwxrwxr-x, debe ser ejecutable, ¿eh?
EDITAR : como dijo @ gd1, theApp.app es una carpeta (creo que se llama paquete en OSX) y, por lo tanto, no es ejecutable.

Pero aún necesito una solución alternativa:
¿cómo puedo ejecutar mi aplicación de 32 bits en mi sistema de 64 bits correctamente?


EDITAR : ahora puedo abrir la aplicación archcon el comando (gracias @GordonDavisson):

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

Sin embargo, la aplicación de gestión con Components losterror, el registro de muestra a continuación:

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

Por cierto, el 闪讯.app(¡lo odio! Pero lo necesito ...) se utiliza para conectarse a la red en mi universidad en China.


EDITAR :

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

y

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

Parece que es solo de 32 bits y depende del núcleo de 32 bits. Oh, estoy muuuy triste. :(


Acá algunas informaciones que consiguió con la ayuda de @GordonDavisson, tal vez alguien más lo necesita.

El DOC muestra algunos métodos para iniciar temporalmente el kernel de 32 bits para usar extensiones de kernel más antiguas para el software o hardware de terceros.

Y se trata de "Compatibilidad con el núcleo de 64 bits" :

El software o hardware de terceros (como un motor de virtualización) (como una tarjeta PCIe) que se basa en una extensión de kernel que era compatible con Mac OS X Server v10.5 puede no funcionar en Mac que usan el kernel de 64 bits en Mac OS X v10.6. En contacto con el proveedor de software o hardware para una extensión kernel actualizado que funciona con el kernel de 64 bits en Mac OS X v10.6 servidor.

Como solución alternativa, puede iniciar temporalmente con el kernel de 32 bits para usar extensiones de kernel más antiguas para su software o hardware de terceros.

Kjuly
fuente
¿Qué versión de OS X?
skub
@skub 10.7.2. :)
Kjuly
1
No conozco muy bien OSX, pero supongo que "arch" espera que se ejecute un ejecutable como argumento, y el App.app es una carpeta (como puede ver, tiene la letra 'd' al frente principio de la cadena permisos). Serach para el ejecutable dentro de él, creo que en "Contenidos> MacOS"
gd1
@ gd1 ya, tienes razón! Ahora me pregunto cómo ejecutarlo en modo de 32 bits. :)
Kjuly

Respuestas:

19

OS X no tiene un modo general 64/32 bits; se lleva a cabo programas individuales en cualquier modo parece "mejor" cuando se iniciaron. Mantener 3y 2mientras la computadora arranca hará que su núcleo se ejecute en modo de 32 bits, pero esto no tiene nada que ver con el modo en que se ejecutan los programas. OS X puede ejecutar programas en modo de 32 bits bajo un núcleo de 64 bits, o programas en modo de 64 bits bajo un núcleo de 32 bits.

Si su programa solo incluye código de 32 bits, se ejecutará en modo de 32 bits sin que tenga que hacer nada especial. Puede verificar esto ejecutando el filecomando en el ejecutable (generalmente en AppName.app/Contents/MacOS/AppName. Aquí hay algunos ejemplos:

$ 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 dice que Chess.app incluye código Intel de 32 bits y 64 bits ("i386" y "x86_64", respectivamente), VLC.app incluye Intel de 32 bits y PowerPC de 32 bits ("ppc") código, y Adobe Reader sólo incluye código de 32 bits de Intel.

También puede obtener parte de esta información (aunque no con detalles explícitos) del informe del sistema de Información del sistema (en la sección Software -> Aplicaciones).

Si una aplicación tiene código de 32 y 64 bits, puede seleccionar cuál usar en la ventana Obtener información del Finder para la aplicación (habrá una casilla de verificación "Abrir en modo de 32 bits"), o usando la casilla archcomando en el ejecutable (por ejemplo arch -i386 /Applications/theApp.app/Contents/MacOS/theApp). Pero normalmente no debería necesitar hacer esto, el sistema operativo hace un buen trabajo al elegir el mejor modo.

(Una instancia en la que necesitaría anular manualmente la selección de modo es para la compatibilidad del complemento o la biblioteca. Si tiene una aplicación de 32 y 64 bits, pero necesita poder cargar un complemento o biblioteca de solo 32 bits, tendrá para forzar al programa a ejecutarse en modo de 32 bits).

Si tiene programas de 64 bits que no se ejecutarán directamente en un núcleo de 32 bits, tienen algún tipo de error extraño o hay algo aún más extraño. Si proporciona los detalles específicos, podríamos ser capaces de descubrir qué es lo que realmente está yendo mal.

EDITAR: Parece que la aplicación es solo de 32 bits e instala una extensión de kernel de solo 32 bits (kext). Si bien la parte de la aplicación de 32 bits puede ejecutarse en cualquier modo de kernel, los kexts de 32 bits solo pueden cargarse en un kernel de 32 bits (es como un complemento para el kernel). Puede ejecutar el kernel en modo de 32 bits manteniendo presionado 3y 2al inicio, o permanentemente con el comando sudo systemsetup -setkernelbootarchitecture i386(consulte KB # HT3773 de Apple ).

Tenga en cuenta que no debería ser necesario hacer nada especial para abrir la aplicación en modo de 32 bits; Como ese es el único formato incluido, se ejecutará en ese modo sin importar cómo se inicie (en particular, el archcomando no es necesario).

Si tiene aplicaciones de 64 bits que no se ejecutan correctamente en un kernel de 32 bits, ese es un problema separado y le recomendaría publicar otra pregunta al respecto.

Gordon Davisson
fuente
"One instance where you would need to manually override the mode selection is for plugin or library compatibility"este podría ser el caso, necesito ejecutar mi aplicación solo en modo de 32 bits. El programa que siempre se bloquea es MS Word(ahora uso LaTeX en su lugar), no estoy seguro de si el modo de 32 bits causa el bloqueo o no, solo una suposición personal. Y arch -i386 /Applications/theApp.app/Contents/MacOS/theAppes lo que quiero! Voy a intentarlo entonces! ¡¡Gracias!! : D
Kjuly
Desafortunadamente, falló con Components losterror. :( me pegue el registro a mis Q. Gracias de antemano!
Kjuly
1
Ese registro indica que está intentando cargar una extensión del núcleo (.kext), lo que significa que el modo del núcleo importa (es básicamente como un complemento del núcleo), y el bit "arquitectura solicitada / ejecutable no encontrado" sugiere que no admite el modo en el que se está ejecutando el núcleo. Primero, averiguaría qué modos tiene el kext con algo como file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(o puede estar en /Applications/Èó ________________ËÆØ.app/xlpppoe.kext). Si solo es de 32 bits, deberá iniciar el núcleo en modo de 32 bits (consulte aquí ).
Gordon Davisson el
Hola @ Gordon, pongo la información a mi pregunta. Quizás puedas usar mi última parte como parte de tu respuesta. : p Gracias de todos modos!
Kjuly