在 Objective C (Mac OS X) 中检测 CPU 架构(32 位/64 位)运行时

2024-02-06

我目前正在拧一个Cocoa http://en.wikipedia.org/wiki/Cocoa_%28API%29需要执行一些针对 32 位和 64 位优化的(控制台)应用程序的应用程序。因此,我想检测应用程序正在运行的 CPU 架构,以便我可以启动正确的控制台应用程序。

简而言之:如何检测应用程序是否在 64 位操作系统上运行?

编辑:我知道Mach-O http://en.wikipedia.org/wiki/Mach-O胖二进制文件,那不是我的问题。我需要知道这一点,以便我可以启动另一个非捆绑(控制台)应用程序。一种经过优化的x86 http://en.wikipedia.org/wiki/X86和一个用于x64 http://en.wikipedia.org/wiki/X86-64.


有一个超级简单的方法。编译两个版本的可执行文件,一种用于 32 位,一种用于 64 位,并将它们与 lipo 结合起来。这样,正确的版本将始终被执行。

gcc -lobjc somefile.m -o somefile -m32 -march=i686
gcc -lobjc somefile.m -o somefile2 -m64 -march=x86_64
lipo -create -arch i686 somefile -arch x86_64 somefile2 -output somefileUniversal

编辑:或者首先编译一个通用二进制文件gcc -arch i686 -arch x86_64

回应OP的评论:

if(sizeof(int*) == 4)
    //system is 32-bit
else if(sizeof(int*) == 8)
    //system is 64-bit

编辑:哦!我没有意识到你需要运行时检查...查看输出sysctl -A,两个变量看起来可能有用。尝试解析输出sysctl hw.optional.x86_64 and sysctl hw.cpu64bit_capable。我没有 32 位 Mac 来测试这一点,但在 Core2Duo Mac 上的 Snow Leopard 中,这两个值都设置为 1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Objective C (Mac OS X) 中检测 CPU 架构(32 位/64 位)运行时 的相关文章

随机推荐