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

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

我有一个仅存在 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 的帮助下获得的一些信息,也许其他人需要它。

文档展示了一些临时使用 32 位内核启动的方法,以便将较旧的内核扩展用于第三方软件或硬件。

这是关于“与 64 位内核的兼容性”

依赖于与 Mac OS X Server v10.5 兼容的内核扩展的第三方软件(如虚拟化引擎)或硬件(如 PCIe 卡)可能无法在使用 Mac OS X v10.6 中的 64 位内核的 Mac 上运行。请联系软件或硬件供应商,获取可与 Mac OS X Server v10.6 中的 64 位内核兼容的更新内核扩展。

作为一种解决方法,您可以暂时启动 32 位内核,以便将较旧的内核扩展用于第三方软件或硬件。

答案1

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位英特尔代码(分别为“i386”和“x86_64”),VLC.app包含32位英特尔和32位PowerPC(“ppc”)代码,而Adobe Reader仅包含32位英特尔代码。

您还可以从系统信息的系统报告(在软件->应用程序部分)中获取部分信息(尽管不那么详细)。

如果某个应用程序同时具有 32 位和 64 位代码,您可以在 Finder 的应用程序“获取信息”窗口中选择使用哪一个(将有一个“以 32 位模式打开”复选框),或者使用arch可执行文件上的命令(例如arch -i386 /Applications/theApp.app/Contents/MacOS/theApp)。但您通常不需要这样做,操作系统会很好地选择最佳模式。

(您需要手动覆盖模式选择的一个实例是插件或库兼容性。如果您有一个 32 位和 64 位应用程序,但它需要能够加载仅 32 位的插件或库,您必须强制程序在 32 位模式下运行。)

如果您的 64 位程序无法在 32 位内核下正确运行,那么它们要么存在某种奇怪的错误,要么发生了更奇怪的事情。如果您提供具体细节,我们也许能够找出到底出了什么问题。

编辑:看起来该应用程序只有 32 位,并且安装了仅 32 位的内核扩展 (kext)。虽然 32 位应用程序部分可以在任何内核模式下运行,但 32 位 kext 只能加载到 32 位内核中(它就像内核的插件)。您可以在启动时按住3和以 32 位模式运行内核2,也可以使用命令永久运行内核sudo systemsetup -setkernelbootarchitecture i386(请参阅 Apple 的知识库 #HT3773)。

请注意,无需执行任何特殊操作即可在 32 位模式下打开应用程序;因为这是唯一包含的格式,所以无论如何启动它,它都会在该模式下运行(特别是,命令arch不是必要的)。

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

相关内容