在Apple M1 CPU的电脑上设置应用以rosetta方式运行的原理

65 篇文章 1 订阅

       在 M1 的 苹果电脑上配置开发环境时,很多教程会提示将XCode或Simulator设置为以rosetta的方式运行以解决编译时的问题。

       一开始不是很理解,rosetta不是为了兼容老的应用,使编译为x86-64格式的老应用也能运行在M1的ARM cpu上而作的运行时转义吗?没搞明白设置应用为rosetta方式是什么意思,难道这个应用即可以按rosetta的方式运行,也可以按arm的原生的方式运行?那这个应用到底是x86格式的还是arm格式的?

      后来发现可设置为rosetta方式的应用,是x86-64和arm64的二进制格式都有。如果不设为rosetta的方式的话,就直接运行应用包中的arm64格式的二进制文件了。设为rosetta的话,就以rosetta的方式运行应用包中的x86-64的二进制文件。

       如果应用中只有x86-64或arm64格式中的一种,在打开应用的简介后,就不会出现rosetta选项了。因为系统没得选,是啥格式就按啥方式运行。

查看应用包中cpu格式的方式:

下面以系统自带的《词典》应用为例,右键词典.app,在弹出菜单上选中显示包内容:

打开的包中,Contents/MacOS/目录下是应用编译后的二进制文件:

 打开终端,cd 到Contents/MacOS目录下:

cd /System/Applications/Dictionary.app/Contents/MacOS

可以将Finder中的MacOS文件夹拖到终端,就会在终端输入MacOS的路径了。

然后执行命令:lipo -info Dictionary

输出如下:

Architectures in the fat file: Dictionary are: x86_64 arm64e

所以看到系统的《字典》应用 包含了 x86_64 和 arm64e 两个架构。

再安装钉钉和微信和钉钉,同样的方式,可以看到微信是x86_64 arm64e

而钉钉只有x86_64,所以打开钉钉的简介后,就没有rosetta选项,而微信则有。

如下操作看钉钉支持的cpu 架构:

cd  /Applications/DingTalk.app/Contents/MacOS

lipo -info DingTalk

输出为:

Non-fat file: DingTalk is architecture: x86_64

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值