【问题标题】:64 bit processor running at 32 bit on mac在 mac 上以 32 位运行的 64 位处理器
【发布时间】:2013-02-23 23:09:27
【问题描述】:

根据apple's mac processor list,i5 应该是 64 位处理器。根据this video,如果我在终端输入uname -m,我应该得到x86_64。但在我的情况下,它改为 i386。这是为什么?我还开发了一个应用程序,这是一个仅限 64 位的应用程序。该应用程序未在此 Mac 上运行。它在开始时崩溃。但是如果我在 x86_64 模式下编译而不是 64 位,那么它就可以工作。有人知道如何解决这个问题吗?

【问题讨论】:

  • “仅 64 位”是什么意思? x86_64 只有 64 位。
  • x86_64 64位。
  • 对不起,我面前没有mac,所以也许我记错了。编译时我有 3 个选项:一个仅用于 64 位,一个用于 32 和 64 位,一个用于 32 位。我的意思是编译 32 位和 64 位的选项。迫使我禁用 ARC 的那个。

标签: macos 64-bit 32-bit processor


【解决方案1】:

32 位运行时不支持 ARC。因此,如果您使用 ARC,您将只需要生成 64 位二进制文​​件。

来自Transitioning to ARC Release Notes

适用于 OS X v10.6 和 v10.7(64 位)的 Xcode 4.2 支持 ARC 应用程序)和 iOS 4 和 iOS 5。弱引用不是 在 OS X v10.6 和 iOS 4 中受支持。

【讨论】:

  • 谢谢,但我的问题基本上是:如果处理器是 i5,为什么它不运行我的 64 位应用程序,但成功运行 32/64 位应用程序?
  • 如果 OSX 已经启动到 32 位模式,那么它将使用 32 位二进制而不是 64 位二进制。如果您启动到 64 位模式,它将改用 64 位。
  • 永久启动到 64 位模式有缺点吗?感谢您的帮助!
  • @Justme 不,完全没有,但这可能取决于您运行的 OSX 版本。
  • 在这个特定的 mac 10.6.8 上
【解决方案2】:

视频是错误的:uname -m 告诉你内核运行的模式,这与你的用户态程序几乎没有关系。如果您想确定 CPU 是否支持 64 位,请使用 sysctl hw.cpu64bit_capable - 因为您有 i5,它应该打印 hw.cpu64bit_capable: 1 表示“是”(0 表示“否”)。此外,运行 Activity Monitor 实用程序,并注意各种进程正在运行的模式——我猜很多将在“Intel(64 位)”中,因为在 10.6 中,OS X 提供的大多数程序都是 32 /64 位双架构,更喜欢 64 位。

现在,关于您的应用程序:无论您仅编译 64 位还是 63/64 位,它都应该在 64 位模式下运行,所以我怀疑这是问题所在。可以肯定的是,编译它 32/64,运行它,然后使用 Activity Monitor 查看它实际运行的模式。

我无法确定,但我猜您的应用可能存在 ARC 问题。至少据我了解,仅当您仅编译 64 位时才启用(如果编译 32/64 则禁用)。

【讨论】:

  • 非常感谢!我试图在较旧的 Mac 上安装 xcode 4.2,当我加载项目时,它给出了 CFNetwork.framework 的错误。 (在 xcode 4.6 上没有此错误)无论如何感谢您的提示!我应该注意什么不启用ARC?谢谢!
  • @Justme:不幸的是,我对 ARC 不是很熟悉(这可能是我不知道的编译模式之间的其他差异)。我建议回归基本调试:检查崩溃日志、在调试器中运行、查找泄漏等。
猜你喜欢
  • 2016-01-12
  • 2014-02-01
  • 2010-09-19
  • 2011-01-30
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多