Kju*_*uly 15 mac 64-bit compatibility 32-bit macos
我有一个仅存在 32 位版本的应用程序。为了使用它,我曾经在启动Mac之前按2
&3
一起,所以它会在32位模式下运行。但是,某些应用程序(之前安装的 64 位版本)在此模式下总是会崩溃。
我碰巧看到一个在 64 位系统中运行 32 位应用程序的解决方案:
arch -i386 theApp.app
Run Code Online (Sandbox Code Playgroud)
但我试arch: /Applications/theApp.app isn't executable
错了。我检查了文件权限,它显示drwxrwxr-x
,它应该是可执行的,嗯?
编辑:正如@gd1 所说,theApp.app 是一个文件夹(我认为在 OSX 中称为包),因此它不可执行。
但我仍然需要一个解决方法:
如何在我的 64 位系统中正确运行我的 32 位应用程序?
编辑:我arch
现在可以使用命令打开应用程序(感谢@GordonDavisson):
arch -i386 /Applications/theApp.app/Contents/MacOS/theApp
Run Code Online (Sandbox Code Playgroud)
但是,该应用程序运行时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).
Run Code Online (Sandbox Code Playgroud)
顺便说一句,??.app
(我讨厌它!但我需要它..)用于连接我在中国大学的网络。
编辑:
Kjuly@MacBook-Pro:~$ file /Applications/??.app/Contents/MacOS/??
/Applications/??.app/Contents/MacOS/??: Mach-O executable i386
Run Code Online (Sandbox Code Playgroud)
和
Kjuly@MacBook-Pro:~$ file /Applications/??.app/xlpppoe.kext/Contents/MacOS/xlpppoe
/Applications/??.app/xlpppoe.kext/Contents/MacOS/xlpppoe: Mach-O object i386
Run Code Online (Sandbox Code Playgroud)
似乎它只是 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 位内核启动,以便为您的第三方软件或硬件使用较旧的内核扩展。
Gor*_*son 19
OS X 没有整体的 64/32 位模式;它在启动时以任何看起来“最佳”的模式运行单个程序。在计算机启动时按住3和2将使其内核以 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
Run Code Online (Sandbox Code Playgroud)
...这告诉我 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 位内核中(它就像内核的插件)。您可以通过在启动时按住3和2或永久使用该命令以 32 位模式运行内核sudo systemsetup -setkernelbootarchitecture i386
(请参阅 Apple 的KB #HT3773)。
请注意,在 32 位模式下打开应用程序不需要做任何特殊的事情;因为这是唯一包含的格式,所以无论它如何启动,它都会在该模式下运行(特别是,该arch
命令不是必需的)。
如果您有任何无法在 32 位内核下正常运行的 64 位应用程序,这是一个单独的问题,我建议发布另一个关于此的问题。
归档时间: |
|
查看次数: |
29029 次 |
最近记录: |