Jak mogę uruchomić 32-bitową aplikację na 64-bitowym OSX 10.7.2?

15

Mam aplikację, która istnieje tylko wersja 32-bitowa. Aby go użyć, naciskałem klawisze 2& 3razem przed uruchomieniem komputera Mac, aby działał w trybie 32-bitowym. Jednak niektóre aplikacje (wcześniej zainstalowana wersja 64-bitowa) zawsze ulegają awarii w tym trybie.

Zdarzyło mi się zobaczyć rozwiązanie, które uruchamia 32-bitową aplikację w systemie 64-bitowym:

arch -i386 theApp.app

Ale próbowałem z arch: /Applications/theApp.app isn't executablebłędem. Sprawdziłem uprawnienia do pliku i okazało się drwxrwxr-x, że powinno być wykonywalne, co?
EDYCJA : Jak powiedział @ gd1, app.ap jest folderem (myślę, że w OSX nazywa się to pakietem) i dlatego nie jest wykonywalny.

Ale wciąż potrzebuję obejścia:
Jak poprawnie uruchomić moją 32-bitową aplikację w 64-bitowym systemie?


EDYCJA : Mogę teraz otworzyć aplikację za archpomocą polecenia (dzięki @GordonDavisson):

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

Jednak aplikacja działa z Components lostbłędem, dziennik pokazano poniżej:

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, 闪讯.app(Nienawidzę !! Ale potrzebuję tego ...) służy do połączenia z siecią na moim uniwersytecie w Chinach.


EDYCJA :

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

i

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

Wygląda na to, że jest tylko 32-bitowy i zależy od 32-bitowego jądra. Och, jestem taka smutna. :(


Oto kilka informacji, które otrzymałem przy pomocy @GordonDavisson, może ktoś inny tego potrzebuje.

The DOC pokazuje kilka metod, aby tymczasowo uruchamiany z jądrem 32-bitowym, aby używać starszych rozszerzeń jądra dla oprogramowania firm trzecich lub sprzętu.

I chodzi o „Kompatybilność z 64-bitowym jądrem” :

Oprogramowanie innych firm (takie jak silnik wirtualizacji) lub sprzęt (taki jak karta PCIe), który korzysta z rozszerzenia jądra zgodnego z systemem Mac OS X Server 10.5, może nie działać na komputerach Mac, które używają 64-bitowego jądra w Mac OS X 10.6. Skontaktuj się z dostawcą oprogramowania lub sprzętu, aby uzyskać zaktualizowane rozszerzenie jądra, które współpracuje z 64-bitowym jądrem w systemie Mac OS X Server 10.6.

Aby obejść ten problem, możesz tymczasowo uruchomić 32-bitowe jądro, aby używać starszych rozszerzeń jądra dla oprogramowania lub sprzętu innych firm.

Kjuly
źródło
Jaka wersja OS X?
skub
@skub 10.7.2. :)
Lipiec
1
Nie znam dobrze OSX, ale przypuszczam, że „arch” oczekuje, że plik wykonywalny zostanie podany jako argument, a aplikacja.App.app jest folderem (jak widać, ma literę „d” na początku początek ciągu uprawnień). Serach dla pliku wykonywalnego wewnątrz niej, wierzę w punkcie „Zawartość> MacOS”
GD1
@ gd1 ya, masz rację! Teraz zastanawiam się, jak uruchomić go w trybie 32-bitowym. :)
Kwietnia

Odpowiedzi:

19

OS X nie ma ogólnego trybu 64/32 bitowego; uruchamia poszczególne programy w dowolnym trybie, który po uruchomieniu wydaje się „najlepszy”. Przytrzymanie 3i 2uruchomienie komputera sprawi, że jego jądro uruchomi się w trybie 32-bitowym, ale nie ma to nic wspólnego z tym, w jakim trybie działają programy. OS X może z radością uruchamiać programy w trybie 32-bitowym pod jądrem 64-bitowym lub programami w trybie 64-bitowym pod jądrem 32-bitowym.

Jeśli twój program zawiera tylko kod 32-bitowy, będzie działał w trybie 32-bitowym bez konieczności robienia czegokolwiek specjalnego. Możesz to sprawdzić, uruchamiając filepolecenie w pliku wykonywalnym (zazwyczaj w AppName.app/Contents/MacOS/AppName. Oto kilka przykładów:

$ 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

... co mówi mi, że Chess.app zawiera 32-bitowy i 64-bitowy kod Intel (odpowiednio „i386” i „x86_64”), VLC.app zawiera 32-bitowy Intel i 32-bitowy PowerPC („ppc”) kod, a Adobe Reader zawiera tylko 32-bitowy kod Intel.

Możesz również uzyskać niektóre z tych informacji (choć nie w jednoznacznych szczegółach) z raportu systemowego Informacje o systemie (w sekcji Oprogramowanie -> Aplikacje).

Jeśli aplikacja ma zarówno 32-, jak i 64-bitowy kod, możesz wybrać, którego chcesz użyć w oknie Find Info Get Info dla aplikacji (pojawi się pole wyboru „Otwórz w trybie 32-bitowym”) lub za pomocą archpolecenie w pliku wykonywalnym (np arch -i386 /Applications/theApp.app/Contents/MacOS/theApp.). Ale zwykle nie powinieneś tego robić, system operacyjny wykonuje dobrą robotę, wybierając najlepszy tryb.

(Jednym z przypadków, w których trzeba ręcznie zastąpić wybór trybu, jest kompatybilność wtyczki lub biblioteki. Jeśli masz aplikację 32- i 64-bitową, ale musi ona być w stanie załadować wtyczkę lub bibliotekę tylko 32-bitową, będziesz mieć aby wymusić uruchomienie programu w trybie 32-bitowym).

Jeśli masz 64-bitowe programy, które nie działają bezpośrednio pod 32-bitowym jądrem, mają albo jakiś dziwny błąd, albo dzieje się coś jeszcze dziwniejszego. Jeśli podasz szczegółowe informacje, być może uda nam się dowiedzieć, co się właściwie dzieje.

EDYCJA: Wygląda na to, że aplikacja jest tylko 32-bitowa i instaluje tylko jądro z rozszerzeniem (kext). Podczas gdy 32-bitowa część aplikacji może działać w dowolnym trybie jądra, 32-bitowe keksty mogą być ładowane tylko do 32-bitowego jądra (jest to jak wtyczka do jądra). Jądro można uruchomić w trybie 32-bitowym, przytrzymując 3i 2przy uruchamianiu lub na stałe za pomocą polecenia sudo systemsetup -setkernelbootarchitecture i386(patrz KB firmy Apple # HT3773 ).

Pamiętaj, że nie trzeba robić nic specjalnego, aby otworzyć aplikację w trybie 32-bitowym; ponieważ jest to jedyny dołączony format, będzie działać w tym trybie bez względu na to, jak zostanie uruchomiony (w szczególności archpolecenie nie jest konieczne).

Jeśli masz jakieś 64-bitowe aplikacje, które nie działają poprawnie pod 32-bitowym jądrem, jest to osobny problem i radzę zadać kolejne pytanie na ten temat.

Gordon Davisson
źródło
"One instance where you would need to manually override the mode selection is for plugin or library compatibility"może się tak zdarzyć, że muszę uruchomić aplikację tylko w trybie 32-bitowym. Program, który zawsze ulega awarii MS Word(zamiast tego używam teraz LaTeX-a), nie jestem pewien, czy tryb 32-bitowy powoduje awarię, czy nie, to tylko domysł. I arch -i386 /Applications/theApp.app/Contents/MacOS/theApptego chcę! Spróbuję wtedy! Dzięki!! : D
Kjuly
Niestety nie powiodło się z Components lostbłędem. :(
Wklejam
1
Ten dziennik wskazuje, że próbuje załadować rozszerzenie jądra (.kext), co oznacza, że ​​tryb jądra ma znaczenie (zasadniczo przypomina wtyczkę jądra), a bit „nie znaleziono żądanej architektury / pliku wykonywalnego” sugeruje, że nie obsługuje tryb, w którym działa jądro. Najpierw chciałbym dowiedzieć się, jakie tryby ma kext z czymś takim file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(lub może to być w /Applications/ÈónexËÆØ.app/xlpppoe.kext). Jeśli jest tylko 32-bitowy, musisz uruchomić jądro w trybie 32-bitowym (patrz tutaj ).
Gordon Davisson
Cześć @ Gordon, podałem informacje do mojego pytania. Może możesz użyć mojej ostatniej części jako części swojej odpowiedzi. : p W każdym razie dzięki !!
Kjuly