Как я могу запустить 32-битное приложение на 64-битной OSX 10.7.2?

15

У меня есть приложение, которое существует только в 32-битной версии. Чтобы использовать его, я обычно нажимал 2& 3вместе перед загрузкой Mac, чтобы он работал в 32-битном режиме. Тем не менее, некоторые приложения (64-битная версия, которая была установлена ​​ранее) всегда будут зависать в этом режиме.

Мне довелось увидеть решение, которое запускает 32-битное приложение в 64-битной системе:

arch -i386 theApp.app

Но я попробовал с arch: /Applications/theApp.app isn't executableошибкой. Я проверил разрешение файла и он показал drwxrwxr-x, что он должен быть исполняемым, а?
РЕДАКТИРОВАТЬ : Как сказал @ gd1, App.app - это папка (я думаю, в OSX она называется bundle), и поэтому она не является исполняемой.

Но мне все еще нужен обходной путь:
как правильно запустить 32-битное приложение в моей 64-битной системе?


РЕДАКТИРОВАТЬ : я могу открыть приложение archсейчас с помощью команды (спасибо @GordonDavisson):

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

Тем не менее, приложение работает с Components lostошибкой, журнал показан ниже:

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

Кстати, 闪讯.app(я ненавижу это! Но мне это нужно ..) используется для подключения к сети в моем университете в Китае.


РЕДАКТИРОВАТЬ :

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

и

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

Кажется, это только 32-разрядная версия и зависит от 32-разрядного ядра. О, я ооочень грустный. :(


Вот некоторые сведения, которые я получил с помощью @GordonDavisson, возможно, кому-то еще это понадобится.

В DOC показывает некоторые методы , чтобы временно запускались с 32-битным ядром использовать старые расширения ядра для программного или аппаратного обеспечения сторонних производителей .

И речь идет о «Совместимости с 64-битным ядром» :

Программное обеспечение сторонних производителей (например, механизм виртуализации) или аппаратное обеспечение (например, карта PCIe), использующее расширение ядра, совместимое с Mac OS X Server v10.5, может не работать на компьютерах Mac, использующих 64-разрядное ядро ​​в Mac OS X v10.6. Обратитесь к поставщику программного или аппаратного обеспечения для получения обновленного расширения ядра, которое работает с 64-разрядным ядром в Mac OS X Server v10.6.

В качестве обходного пути вы можете временно запустить 32-разрядное ядро, чтобы использовать более старые расширения ядра для стороннего программного или аппаратного обеспечения.

Kjuly
источник
Какая версия OS X?
Skub
@skub 10.7.2. :)
Кюлы
1
Я не очень хорошо знаю OSX, но я полагаю, что «arch» ожидает, что исполняемый файл будет задан в качестве аргумента, а theApp.app - это папка (как вы можете видеть, перед ней стоит буква «d»). начало строки разрешений). Поищите исполняемый файл внутри него, я думаю, в разделе «Содержание> MacOS»
gd1
@ gd1 ты прав! Теперь интересно, как запустить его в 32-битном режиме. :)
Кюлы

Ответы:

19

OS X не имеет общего 64/32 битного режима; он запускает отдельные программы в любом режиме, который кажется «лучшим» при запуске. Удержание 3и 2при загрузке компьютера заставит его ядро ​​работать в 32-битном режиме, но это не имеет никакого отношения к тому, в каком режиме запускаются программы. OS X может успешно запускать программы в 32-битном режиме под 64-битным ядром или программы в 64-битном режиме под 32-битным ядром.

Если ваша программа содержит только 32-битный код, она будет работать в 32-битном режиме без необходимости делать что-то особенное. Вы можете проверить это, запустив fileкоманду на исполняемом файле (как правило, в AppName.app/Contents/MacOS/AppName. Вот несколько примеров:

$ 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

... который говорит мне, что Chess.app включает в себя 32-битный и 64-битный код Intel («i386» и «x86_64» соответственно), VLC.app включает в себя 32-битный Intel и 32-битный PowerPC («ppc») код, а Adobe Reader включает только 32-битный код Intel.

Вы также можете получить часть этой информации (хотя и не так подробно) из системного отчета о системной информации (в разделе «Программное обеспечение -> Приложения»).

Если приложение имеет как 32-, так и 64-битный код, вы можете выбрать, какой из них использовать в окне «Информация» в приложении Finder (будет установлен флажок «Открыть в 32-битном режиме»), или с помощью archкоманда на исполняемый файл (например arch -i386 /Applications/theApp.app/Contents/MacOS/theApp). Но обычно вам не нужно этого делать, ОС отлично справляется с выбором лучшего режима.

(Один из случаев, когда вам нужно было бы вручную переопределить выбор режима, это совместимость с плагином или библиотекой. Если у вас 32- и 64-битное приложение, но оно должно быть в состоянии загрузить только 32-битный плагин или библиотеку, у вас будет заставить программу работать в 32-битном режиме.)

Если у вас есть 64-битные программы, которые не работают прямо под 32-битным ядром, у них либо есть какая-то странная ошибка, либо происходит что-то еще более странное. Если вы укажете конкретные детали, мы сможем выяснить, что на самом деле идет не так.

РЕДАКТИРОВАТЬ: похоже, что приложение является только 32-разрядным, и устанавливает только 32-разрядное расширение ядра (kext). В то время как 32-битная часть приложения может работать в любом режиме ядра, 32-битные kexts могут загружаться только в 32-битное ядро ​​(это как плагин для ядра). Вы можете запустить ядро ​​в 32-битном режиме, удерживая 3и 2при запуске, или постоянно с помощью команды sudo systemsetup -setkernelbootarchitecture i386(см. Apple KB # HT3773 ).

Обратите внимание, что не нужно делать ничего особенного, чтобы открыть приложение в 32-битном режиме; поскольку это единственный включенный формат, он будет работать в этом режиме независимо от того, как он запускается (в частности, archкоманда не нужна).

Если у вас есть 64-битные приложения, которые не работают должным образом под 32-битным ядром, это отдельная проблема, и я бы рекомендовал опубликовать еще один вопрос об этом.

Гордон Дэвиссон
источник
"One instance where you would need to manually override the mode selection is for plugin or library compatibility"в этом случае мне нужно запускать приложение только в 32-битном режиме. Программа, которая всегда дает сбой MS Word(я использую LaTeX вместо этого сейчас), я не уверен, вызвал ли сбой 32-битный режим, просто личное предположение. И arch -i386 /Applications/theApp.app/Contents/MacOS/theAppэто то, что я хочу! Я попробую тогда! Благодарность!! : D
Кюлы
К сожалению, это не удалось с Components lostошибкой. :( Я
вставляю
1
Этот журнал указывает, что он пытается загрузить расширение ядра (.kext), что означает, что режим ядра имеет значение (он в основном похож на плагин ядра), а бит «запрошенная архитектура / исполняемый файл не найден» предполагает, что он не поддерживает mode, в котором работает ядро. Во-первых, я бы выяснил, в каких режимах работает kext с чем-то вроде file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(или это может быть в /Applications/ÈóËÆËÆËÆ.app/xlpppoe.kext). Если он только 32-битный, вам нужно будет запустить ядро ​​в 32-битном режиме (см. Здесь ).
Гордон Дэвиссон
Привет @ Гордон, я поставил информацию на мой вопрос. Может быть, вы можете использовать мою последнюю часть как часть вашего ответа. : p В любом случае, спасибо !!
Кюлы,