armv7在哪儿看(armv7s)

iOS中的armv7,armv7s,arm64,i386,x86_64都是什么在做静态库的时候以及引用静态库的时候经常会遇到一些关于真机模拟器不通用的情况,会报错找不到相应库导致编译失败,这里简单记录一下各种设备支持的架构。iOS测试分为模拟器测试和真机测试,处理器分为32位处理器,和64位处理器,模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器…

大家好,又见面了,我是你们的朋友全栈君。

iOS 中的 armv7,armv7s,arm64,i386,x86_64 都是什么
在做静态库的时候以及引用静态库的时候经常会遇到一些关于真机模拟器不通用的情况,会报错找不到相应库导致编译失败,

这里简单记录一下各种设备支持的架构。

iOS测试分为模拟器测试和真机测试,处理器分为32位处理器,和64位处理器,

模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器)

模拟器64位处理器测试需要x86_64架构,(iphone6以上的模拟器)

真机32位处理器需要armv7,或者armv7s架构,(iphone4真机/armv7, ipnone5,iphone5s真机/armv7s)

真机64位处理器需要arm64架构。(iphone6,iphone6p以上的真机)

project -> target -> building setting -> Arhitectures 设置

debug属性设置为no的时候,会编译支持所有架构的版本,编译的速度会变慢,设置为yes 的时候,只编译当前的architecture版本,编译速度快。

一般情况下,debug 设置为yes,release为no,这样发行版本能适应不同设备。

现在先说说不同型号的iPhone都使用的是什么指令集:
ARMv8/ARM64 = iPhone 5s, iPad Air, Retina iPad Mini
ARMv7s = iPhone 5, iPhone 5c, iPad 4
ARMv7 = iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini
ARMv6 = iPhone, iPhone 3G, iPod 1G/2G

设置你想支持的指令集

Xcode中关于生成二进制包指令集相关的设置项有以下三个:

Architectures

官方文档说明:
Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified architectures.

该编译选项指定了工程将被编译成支持哪些指令集,支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大。

Valid Architectures

官方文档说明:
Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary.

该编译项指定可能支持的指令集,该列表和Architectures列表的交集,将是Xcode最终生成二进制包所支持的指令集。

比如,你的Valid Architectures设置的支持arm指令集版本有:armv7/armv7s/arm64,对应的Architectures设置的支持arm指令集版本有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包。

Build Active Architecture Only

官方文档说明:
Boolean value. Specifies whether the product includes only object code for the native architecture.

该编译项用于设置是否只编译当前使用的设备对应的arm指令集。

当该选项设置成YES时,你连上一个armv7指令集的设备,就算你的Valid Architectures和Architectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。

当然该选项起作用的前提是你的Xcode必须成功连接了调试设备。如果你没有任何活跃设备,即Xcode没有成功连接调试设备,就算该设置项设置成YES依然还会编译Valid Architectures和Architectures指定的二进制包。

通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO。

说明

指令集都是可以向下兼容的

比如,你的设备是armv7s指令集,那么它也可以兼容运行比armv7s版本低的指令集:armv7、armv6

xcode对armv6指令集的支持

Xcode4.5起不再支持armv6,Xcode4.5的release notes中明确指出:
Changes
General: iOS

This version of Xcode does not generate armv6 binaries. 12282156
The minimum deployment target is iOS 4.3. 12282166

如何选择支持的指令集

如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果。

我们的项目之前支持的指令集是armv7/armv7s,后来改成只支持armv7后,比原来小了10MB左右。目前AppStore上的一些知名应用,比如百度地图、腾讯地图通过反汇编工具查看后,也都只支持armv7指令集。

根据向下兼容原则,armv7指令集的应用是可以正常在支持armv7s/arm64指令集的机器上运行的。

不过对于armv7s/arm64指令集设备来说,使用运行armv7应用是会有一定的性能损失,不过这种损失有多大缺乏权威统计数据,个人认为是不会影响用户体验的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128322.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Reaver v1.4 用法整理 含高级参数说明 pin必备资料「建议收藏」

    Reaver v1.4 用法整理 含高级参数说明 pin必备资料「建议收藏」闲话少叙使用方法:airmon-ngstartwlan0//启动mon0监控reaver-imon0-bMAC-a-S-vv//普通用法 如果,90.9%进程后死机或停机,请记下PIN前四位数,用指令:reaver-imon0-bMAC-a-vv-pXXXX(PIN前四位数) 其他命令airodump-ngmon0用来扫

    2022年5月4日
    59
  • html5不用reload重置网页,refresh和reload「建议收藏」

    html5不用reload重置网页,refresh和reload「建议收藏」location.refresh和location.reload的区别在什么location.refresh:刷新页面location.reload:重载页面javascript怎么刷新页面,要refresh不要reloadlocation.reload();下面是复制的用js实现的刷新页面的代码,比较全先来看一个简单的例子:下面以三个页面分别命名为frame.html、top.htm…

    2022年7月18日
    20
  • shell运维脚本实例_100个必会的shell脚本

    shell运维脚本实例_100个必会的shell脚本无论是系统运维,还是应用运维,均可分为“**纯手工”—>“脚本化”—>“自动化”—>“智能化”**几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避免重复性操作及风险,另一方面提高执行效率。在自动化运维的转变过程中,经常使用的可能就是shell脚本了。很多人认为shell脚本简单,但其实Shell的小脚本却有大智慧。别小看几十行代码,它夹杂着系统设计、代码规范和操作经验等等细节,在建设自动化运维的工作中,还是很值得我们研究学习的。为了帮助大.

    2022年9月28日
    2
  • 自动编码器(Autoencoder)

    自动编码器(Autoencoder)autoencoder是一种无监督的学习算法。在深度学习中,autoencoder用于在训练阶段开始前,确定权重矩阵WW的初始值。神经网络中的权重矩阵WW可看作是对输入的数据进行特征转换,即先将数据编码为另一种形式,然后在此基础上进行一系列学习。然而,在对权重初始化时,我们并不知道初始的权重值在训练时会起到怎样的作用,也不知道在训练过程中权重会怎样的变化。因此一种较好的思

    2022年6月10日
    30
  • html+css唯美登录页面,代码提供(效果展示)「建议收藏」

    html+css唯美登录页面,代码提供(效果展示)「建议收藏」效果图所有代码<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><metahttp-equiv=”X-UA-Compatible”content=”IE=edge”><metaname=”viewport”content=”width=device-width,initial-scale=1.0″><ti

    2022年5月23日
    41
  • myeclipse最新版_Myeclipse

    myeclipse最新版_Myeclipse只支持单线程下载,单线程最高速度180K左右,好像下载地址加密了https://anonym-proxy.info/index.php?q=aHR0cDovL2Rvd25sb2FkczQubXllY2xpcHNlaWRlLmNvbS9kb3dubG9hZHMvcHJvZHVjdHMvZXdvcmtiZW5jaC9oZWxpb3MvaW5zdGFsbGVycy9teWVjbGlwc2UtYmx1ZS05LjAtb2ZmbGluZS1pbnN0YWxsZXItd2luZG93cy5leGU%3Dhttps://

    2022年9月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号