如何在64位OSX 10.7.2上运行32位应用程序?


15

我有一个仅存在32位版本的应用程序。为了使用它,我曾经在引导Mac时同时按2&键3,所以它将在32位模式下运行。但是,某些应用程序(之前安装的64位版本)将始终在此模式下崩溃。

我偶然看到在64位系统中运行32位应用程序的解决方案:

arch -i386 theApp.app

但是我尝试了arch: /Applications/theApp.app isn't executable错误。我检查了文件权限,并显示drwxrwxr-x,它应该是可执行文件,对吗?
编辑:正如@ gd1所说,TheApp.app是一个文件夹(我认为它在OSX中称为bundle),因此它不是可执行文件。

但是我仍然需要一种解决方法:
如何在我的64位系统中正确运行32位应用程序?


编辑:我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位内核的兼容性”的

依赖于与Mac OS X Server v10.5兼容的内核扩展的第三方软件(例如虚拟化引擎)或硬件(例如PCIe卡)可能不适用于在以下操作系统中使用64位内核的Mac: Mac OS X v10.6。请与软件或硬件供应商联系,以获取与Mac OS X Server v10.6中的64位内核一起使用的更新的内核扩展。

解决方法是,您可以暂时使用32位内核启动,以将较旧的内核扩展名用于第三方软件或硬件。


什么版本的OS X?
skub 2012年

@skub 10.7.2。:)
Kjuly 2012年

1
我不太了解OSX,但是我想“ arch”期望将可执行文件作为参数提供,并且App.app是一个文件夹(如您所见,它的前面带有'd'字母)权限字符串的开头)。检索算法的可执行文件里面,我相信“目录> MacOS的”下
GD1

@ gd1是的,您是对的!现在我想知道如何在32位模式下运行它。:)
Kjuly 2012年

Answers:


19

OS X没有整体的64/32位模式。它会在启动时以“最佳”模式运行单个程序。按住32随着计算机启动,其内核将在32位模式下运行,但这与程序在哪种模式下运行无关。OS X可以在64位内核下以32位模式愉快地运行程序,或者程序在32位内核下以64位模式运行。

如果您的程序仅包含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位模式运行。)

如果您有不能在32位内核下正确运行的64位程序,则它们可能存在某种奇怪的错误,或者甚至发生了一些奇怪的事情。如果您提供具体细节,我们也许能够找出实际出了什么问题。

编辑:看起来该应用程序仅是32位的,并安装了仅32位的内核扩展(kext)。尽管32位应用程序部分可以在任何内核模式下运行,但32位kexts只能加载到32位内核中(就像内核的插件一样)。您可以通过按住32在启动时以32位模式运行内核,或者永久使用命令运行内核sudo systemsetup -setkernelbootarchitecture i386(请参阅Apple的KB#HT3773)。

请注意,以32位模式打开应用程序不需要做任何特殊的事情;由于这是唯一包含的格式,因此无论启动方式如何,它都将以该模式运行(特别是该arch命令不是必需的)。

如果您有任何无法在32位内核下正常运行的64位应用程序,则这是一个单独的问题,我建议发布有关此问题的另一个问题。


"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
Kjuly 2012年

不幸的是,它失败并显示Components lost错误。:(我将日志粘贴到我的Q中。在此先感谢!
Kjuly 2012年

1
该日志表明它正在尝试加载内核扩展(.kext),这意味着内核模式确实很重要(它基本上像一个内核插件),并且“请求的体系结构/可执行文件未找到”位表明它不支持内核运行的模式。首先,我要弄清楚kext具有什么样的模式file /tmp/xlpppoe.kext/Contents/MacOS/xlpppoe(或者可以在/Applications/Èó™ËÆ.app/xlpppoe.kext中)。如果仅32位,则需要以32位模式启动内核(请参阅此处)。
戈登·戴维森

嗨,@戈登,我把问题提了出来。也许您可以将我的最后一部分用作答案的一部分。:p还是谢谢!!
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.