加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 检测Objective C(Mac OS X)中的CPU架构(32位/ 64

发布时间:2020-12-16 06:47:32 所属栏目:百科 来源:网络整理
导读:我正在拧一个需要执行一些(控制台)应用程序的 Cocoa应用程序,这些应用程序针对32位和64位进行了优化.因此,我想检测运行应用程序的CPU架构,以便启动正确的控制台应用程序. 简而言之:如何检测应用程序是否在64位操作系统上运行? 编辑:我知道Mach-O胖二进制
我正在拧一个需要执行一些(控制台)应用程序的 Cocoa应用程序,这些应用程序针对32位和64位进行了优化.因此,我想检测运行应用程序的CPU架构,以便启动正确的控制台应用程序.

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

编辑:我知道Mach-O胖二进制文件,这不是我的问题.我需要知道这一点,所以我可以启动另一个非捆绑(控制台)应用程序.一个针对x86进行了优化,一个针对x64进行了优化.

解决方法

有一种超级简单的方法.编译可执行文件的两个版本,一个用于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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读