armv7和arm64区别(armv7s)

目前ios的指令集有以下几种:armv6iPhoneiPhone2iPhone3G第一代和第二代iPodToucharmv7iPhone4iPhone4Sarmv7siPhone5iPhone5Carm64iPhone5SiPhone6iPhone6+================================================…

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

目前ios的指令集有以下几种:

  • armv6
    • iPhone
    • iPhone2
    • iPhone3G
    • 第一代和第二代iPod Touch
  • armv7
    • iPhone4
    • iPhone4S
  • armv7s
    • iPhone5
    • iPhone5C
  • arm64
    • iPhone5S
    • iPhone6
    • iPhone6+

================================================

Architecture : 指你想支持的指令集。

Valid architectures : 指即将编译的指令集。

Build Active Architecture Only : 只是否只编译当前适用的指令集。

================================================

添加后运行无反应

可能导致这个问题的原因有以下几种:

TARGETS 的 iOS Deployment Target 版本比 PROJECT 的 iOS Deployment Target 版本低,例: TARGETS 用 5.0 而 PROJECT 用 6.0旧版程式Valid Architectures 需要使用 armv6,但是专案预设使用armv7 ; 专案名称有奇怪的符号,例如经销商资料空白等

解决方法
而解决以上问题的方法可以尝试以下几种方式:

  1. 在PROJECT 的 Info页签内的iOS Deployment Target与TARGETS 的 Summary页签内的部署目标两个属性设置使用一样版本的SDK。
  2. 修改 PROJECT 的 Build Settings“页签及TARGETS 的 Build Settings页签内的Valid Architectures属性为armv6 armv7体系。
  3. 点选到左方目录区块(Navigator View)的最上层后,在右方工具区块((Utilities View)的 Identity > Project Name 属性修改专案名称, Product 210(3) 改成 Product,点选到专案资料夹目录后修改右方工具区块的Group Name跟专案名称一样,点选到 TARGETS 的 Summary 页签内的Bundle Identifier 属性,专案名称改成 (TARGETNAME):com.yourcompany. ( T A R G E T N A M E ) , 例 如 : c o m . y o u r c o m p a n y . (TARGET_NAME),在Xcode 工具列上找到 Product > Clean清除专案一次后再重新Build。
    4。建立一个新专案,将旧专案的程式,资源及参考重新加入新专案内。

ARMv6/7/7s & ARM64

在了解Architecture之前,先来认识这几个名字。armv6, armv7, armv7s, arm64是ARM CPU的不同指令集,就像CPU内潜入的软件版本。其在iPhone处理器型号为A4, A8…

arm 芯片 iPhone 机型
armv6 iPhone, iPhone2, iPhone 3G
armv7 iPhone 3GS, iPhone 4, iPhone 4S
armv7s iPhone 5
arm64 iPhone 5s

指令是向下兼容的,如iPhone5s CPU支持arm64, 但它同时兼容armv7s,只是如果程序使用armv7s指令进行编译,可能无法充分发挥它的64位特性。

Architecture是指该程序编译时的目标设备(就是ARM指令集,如armv7,armv7s…),编译期会为不同的指令集(设备)生成专有的安装包。不同设备上会执行该设备对应的指令集,如iPhone5s会优执行arm64(如果有)

XCode配置

在Target的Architectures设置项内,可以手工分别添加以上的这几个值,从而新增或删除特性指令集。为了更方便的使用指令组合,XCode中定义了一些变量,然而这些变量在不同的XCode版本下又有着不同的值。

  • $(ARCHS_STANDARD)
    这个为XCode中Architecture的默认值,XCode5中,该值为armv7, armv7s,在XCode 5.1时,强制加入了对arm64的编译,于是该值为armv7, armv7s, arm64。
  • $(ARCHS_STANDARD_32_BIT)
    XCode 5和5.1中都为armv7, armv7s,旧一点的版本中应该对应的就只有armv7。
  • $(ARCHS_STANDARD_INCLUDING_64_BIT)
    XCode 5和5.1中都为armv7, armv7s, arm64

如果程序中设置的Architecture为armv7,当使用iPhone 5真机debug时,就会出现“xxxx does not contain a(n) armv7s slice:xxxxx for architecture armv7s”的编译错误,想要解决这个问题,在Architecture中加上armv7s即可。这种情况更常见于第三方开源库上。

XCode 5.1后强制加上了对arm64的支持,但很多很三方库没有进行更新,就导致会产生编译错误。这个解决办法就是删掉XCode 5.1中的默认Architecture,然后分别加上armv7, armv7s,clean后重新build就可以了。等第三方库都支持arm64后,再把该值改回来即可。

同时开启arm64支持后,就不能对iOS 5.1.1之前版本进行开发,要强制将deployment target 设置为5.1.1或之后。

XCode 4.5中移除了对arm6的支持,如果想开发对arm6支持的应用,就要保持用老的XCode了。

查看.a库支持的指令集

可以通过该lipo命令查看.a库所支持的指令集。

~/Library/Developer/Xcode/DerivedData/xxxx/Build/Products/Debug-iphoneos
$ lipo -info *.a
Architectures in the fat file: libPods-AFNetworking.a are: armv7 armv7s
Architectures in the fat file: libPods.a are: armv7 armv7s

Active Architecture

Architectures下有一个Bool型的配置项,叫作Build Active Architecture Only。

YES,表示会针对目标设备进行编译,只会编译对应指令集的包,此时的安装包比较小,但只针对于该指令集设备;
NO,编译器会整合两个指令集到一起,生成的安装包比较大,但是能在不同的设备上安装运行。
一般都是Debug时“Build Active Architecture Only”选择YES,用当前的架构看代码逻辑是否有问题;而在Release时选择NO,来适配不同的设备。

此外,模拟器并不运行arm代码,软件会被编译成x86可以运行的指令。所以生成静态库时都是会先生成两个.a,一个是i386的用于在模拟器运行,另一个是在真实设备上运行的,然后再用命令将两个.a进行合并成。

CocoaPods与Architecture

CocoaPods中所生成Pod项目时,会根据当前Project中的配置来为Pod包的Target Architecture配置。结束后,会有下面的文字提示。

[!] Found multiple values (‘armv7’, ‘armv7s’) for the architectures (‘ARCHS’) build setting for the ‘Pods’ target definition. Using the first.

也就是所如果有多个配置的话,它只会统一的给所有的包target设置为第一个(举例,在Origin Projectg下配置的Architecture为armv7 & armv7s 两个项时,pod生成的项目的所有target中都只默认添加armv7一个项)。

对于XCode 5.1中64位的Error,用 (ARCHSSTANDARD32BIT) ( A R C H S S T A N D A R D 3 2 B I T ) 代 替 系 统 默 认 的 (ARCHS_STANDARD)可以避免这样的问题。

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128410.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • leetcode 接雨水2_code42

    leetcode 接雨水2_code42题目链接给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9 提示:n == height.length0 <= n &lt

  • js获取request中的值_set协议工作原理

    js获取request中的值_set协议工作原理设置http请求头HttpURLConnection.setRequestProperty(Stringkey,Stringvalue); 这个我居然都忘记了,哎~真是岁数大了,心好累。。。 例如:下面就是一个完整的原始网络请求方式HttpURLConnectionconn=null;try{…

  • 服务器灾备解决方案–两地三中心(图文详解)[通俗易懂]

    服务器灾备解决方案–两地三中心(图文详解)[通俗易懂]说明两地三中心:两地是指同城、异地三中心是指生产中心、同城容灾中心、异地容灾中心。备端在线两地三中心灾备方案网络设计如下:容灾系统衡量指标衡量容灾系统的主要指标有RPO(RecoveryPointObject):灾难发生时允许丢失的数据量RTO(RecoveryTimeObjective):系统恢复的时间容灾半径:生产系统和容灾系统之间的距离ROI(R…

  • Pycharm踩坑(一) FileNotFoundError: [Errno 2] No such file or directory: ‘../data/users.txt‘ 目录结构「建议收藏」

    Pycharm踩坑(一) FileNotFoundError: [Errno 2] No such file or directory: ‘../data/users.txt‘ 目录结构「建议收藏」Python使用Pycharm运行程序提示:FileNotFoundError:[Errno2]Nosuchfileordirectory:’../data/users.txt’目录结构test/├──data└──testcases└──test.py在test.py中运行代码:withopen(‘../data/users.txt’)asf…

  • gtest测试用例_数据字典简单例子

    gtest测试用例_数据字典简单例子#includeintfun1(){return10;}classtest:public::testing::Test{public:intfun2(){return1;};};TEST(fun1,test_fun){EXPECT_EQ(10,fun1());//单个函数的测试}TE

  • 记:EVE模拟器拓扑配置的保存及导入

    记:EVE模拟器拓扑配置的保存及导入参考博客:https://bbs.51cto.com/thread-1599315-1.html###EVE模拟器版本信息:先关机:点击这里稍等一会,让他保存。再打开开启并点击R1就能看到配置信息已经保存了。正常情况保存就是为了下次登录来使用,关闭所有设备,重新登录界面。先看下配置信息,还在。导入清节点再开启设备,showrun导入成功。…

发表回复

您的电子邮箱地址不会被公开。

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