Як я можу запустити 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, він повинен бути виконаним, а?
EDIT : Як сказав @ gd1, theApp.app - це папка (в OSX, я думаю, вона називається "пакет"), і тому вона не виконується.

Але мені все ж потрібне вирішення:
як я можу правильно запустити свій 32-розрядний додаток у своїй 64-бітній системі?


EDIT : Я можу зараз відкрити додаток за 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-бітове ядро, щоб використовувати старі розширення ядра для стороннього програмного забезпечення або обладнання.


Яка версія OS X?
скуб

@skub 10.7.2. :)
Kjuly

1
Я не знаю OSX дуже добре, але я вважаю, що "арка" очікує, що виконуваний файл буде вказаний в якості аргументу, а theApp.app - папка (як ви бачите, у неї перед буквою "d" перед початок рядка дозволів). Serach для виконуваного файлу всередині нього, я вважаю, що в розділі "Зміст> MacOS"
gd1

@ gd1 ya, ти маєш рацію! Тепер мені цікаво, як запустити його в 32-бітному режимі. :)
Kjuly

Відповіді:


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-розрядний код, ви можете вибрати, який саме використовувати у вікні Отримати інформацію про програму (знайдеться прапорець "Відкрити в 32-бітному режимі") або за допомогою archкоманда на виконуваному файлі (наприклад arch -i386 /Applications/theApp.app/Contents/MacOS/theApp). Але зазвичай цього не потрібно робити, ОС робить гарну роботу, підбираючи найкращий режим.

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

Якщо у вас є 64-розрядні програми, які не працюватимуть прямо під 32-бітним ядром, у них або є якась дивна помилка, або відбувається щось навіть незнайоме. Якщо ви дасте конкретні деталі, ми можемо з'ясувати, що насправді йде не так.

EDIT: Схоже, додаток лише 32-розрядний та встановлює 32-розрядне розширення ядра (kext). Хоча 32-розрядна частина додатка може працювати в будь-якому режимі ядра, 32-бітні кекси можуть завантажуватися лише в 32-бітове ядро ​​(це як плагін для ядра). Ви можете запустити ядро ​​в 32-бітному режимі, утримуючи 3і 2при запуску, або постійно за допомогою команди sudo systemsetup -setkernelbootarchitecture i386(див. КБ Apple # 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), що означає, що режим ядра має значення (в основному це як плагін ядра), а біт "запитувана архітектура / виконуваний файл не знайдений" говорить про те, що він не підтримує режимі роботи ядра. По-перше, я дізнаюся, у яких режимах працює кекс із чимось на зразок file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(або він може бути замість /Applications/Èó PetrovËÆØ.app/xlpppoe.kext). Якщо воно лише 32-бітне, вам потрібно буде запустити ядро ​​в 32-бітному режимі (див. Тут ).
Гордон Девіссон

Привіт @Gordon, я поставив інформацію на своє запитання. Можливо, ви можете використовувати мою останню частину як частину вашої відповіді. : p Спасибі все одно !!
Kjuly
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.