Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >armv7和arm64区别(armv7s)

armv7和arm64区别(armv7s)

作者头像
全栈程序员站长
发布于 2022-07-28 03:04:46
发布于 2022-07-28 03:04:46
5.4K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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),例如: com.yourcompany.(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库所支持的指令集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/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_32_BIT)代替系统默认的(ARCHS_STANDARD)可以避免这样的问题。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
armv6、armv7、armv7s、arm64 与开发静态库(.a)
ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,它的性能在同等功耗产品中也很出色,几乎所有手机都是使用它的。
全栈程序员站长
2022/09/07
1.2K0
armv7在哪儿看(armv7s)
iOS 中的 armv7,armv7s,arm64,i386,x86_64 都是什么 在做静态库的时候以及引用静态库的时候经常会遇到一些关于真机模拟器不通用的情况,会报错找不到相应库导致编译失败,
全栈程序员站长
2022/07/28
7210
xcode armv6 armv7 armv7s arm64
机器对指令集的支持是向下兼容的,因此armv7的指令集是可以运行在iphone5S的,只是效率没那么高而已~
全栈程序员站长
2022/07/23
3670
iOS_Apple 指令集
​ ARM架构,过去称作高级精简指令集机器(英语:Advanced RISC Machine,更早称作艾康精简指令集机器,Acorn RISC Machine),是一个精简指令集(RISC)处理器架构家族,其广泛地使用在许多嵌入式系统设计。由于节能的特点,其在其他领域上也有很多作为。ARM处理器非常适用于移动通信领域,符合其主要设计目标为低成本、高性能、低耗电的特性。
mikimo
2022/07/20
1.1K0
armv6 armv7 armv7s架构的区别[通俗易懂]
ARM 处理器因为低功耗和小尺寸而闻名,它的性能在同等功耗的产品中也很出色。这里我们注意一点,模拟器并不运行arm代码,软件会被编译成x86可以运行的指令。只有在目标设备上,才会执行设备对应的指令集。
全栈程序员站长
2022/09/13
1.3K0
armv7是什么处理器_originos有几个版本
这两天遇到静态库不支持armv7s的问题,所以顺道了解和总结一下几个arm架构的一些基本区别。
全栈程序员站长
2022/11/17
1.3K0
iOS CPU架构 arm64/armv7s/armv7/armv7k/i386/x86_64
转自:https://docs.elementscompiler.com/Platforms/Cocoa/CpuArchitectures/
望天
2020/02/18
2.5K0
Xcode常用的配置
Header Search Paths与User Header Search Paths
码客说
2019/10/22
1.7K0
iOS开发中的CPU架构问题
首先,之所以提到CPU架构的问题,其实是因为我们iOS开发使用的静态库与动态库与之紧密相连。每一个开发的App都要运行在模拟器或者真机上,在编译的时候,Xcode需要去分析当前运行平台的CPU架构,然后确定所使用的静态库是否支持这个CPU架构。如果不支持就会报错。 一、什么是CPU架构 "CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。目前市面上的CPU分类主要分有两大阵营,一个是intel、AMD为首的复杂指令集CPU,另一个是以IBM、ARM为首
梧雨北辰
2018/04/24
1.8K0
iOS开发中的CPU架构问题
代码管理| 手把手教你封装自己的静态库SDK
这里重点说下,怎样饮用Bundle中的图片资源。这里使用的是简写:@"JWJFramework.bundle/open"其中JWJFramework.bundle是Bundle的名称。
進无尽
2018/09/12
1.5K0
代码管理| 手把手教你封装自己的静态库SDK
Xcode打包踩过的那些坑
一、file was built for archive which is not the architecture being linked (armv7s)
meteoric
2018/11/19
8510
Spidermonkey_gomonkey
最近升级了系统到Mac OS X 10.10 并且更新了XCode6.1和iOS 8.1
全栈程序员站长
2022/11/03
4520
Xcode12适配The linked library is missing one or more architectures required by this target问题
在Target-Build Settings-Excluded Architectures中添加以下代码
freesan44
2020/09/24
10.2K0
iOS 了解Xcode Bitcode
看了以上内容,我们就可以对Bitcode有一个简单的了解了。那么如果我们项目中在使用某些Framework或.a的时候,遇到了类似笔者遇到的错误的时候,我们就需要查看所用的Framework或.a是否支持bitcode。
且行且珍惜_iOS
2022/05/13
9220
iOS 了解Xcode Bitcode
【IOS开发进阶系列】Framework制作专题
http://blog.csdn.net/yongyinmg/article/details/41513917
江中散人_Jun
2023/10/16
5410
【IOS开发进阶系列】Framework制作专题
iOS开发之进阶篇(1)—— 证书、打包上架流程、p12文件
iOS开发相关的证书有很多种,iOS开发证书(iOS App Development)、iOS发布证书(iOS Distribution (App Store and Ad Hoc))、网站推送ID证书(Website Push ID Certificate)、Apple Pay付款处理证书(Apple Pay Payment Processing Certificate)等等。Xcode 11以后,又新增了Apple Development和Apple Distribution,前者是iOS/macOS/tvOS/watchOS各平台开发证书的结合,后者是这些平台的发布证书结合。
iOS Magician
2023/03/22
1.5K0
正经分析iOS包大小优化
包大小优化是项目开发中不可避免会遇到的,网上关于包大小优化的文章很多,每篇文章说的都不尽相同,笔者曾经根据网上的文章做过包大小优化,但效果不尽人意;因此笔者想根据已有的文章、知识结合自己的理解、实践,做一份总结梳理,整理自己的包大小优化逻辑,不光要知道怎么做可以让包大小变化,还要知道为什么这么做能产生效果,所以就有了这篇文章。
莫空9081
2021/05/28
6K0
实践-小细节Ⅳ
网上有很多方法,尝试起来都很麻烦,我这个方法还是比较简单的。 解决方法: 我们在手机用数据线连接到电脑时,会弹出很多手机里面的图片,你的隐私尽收眼底(好尴尬)。在1部分导入A视频文件,点击 2 (照片)的时候会在 3 的位置上出现,此时,我们直接把视频按住,拖到桌面即可,是不是很简单啊!
進无尽
2018/09/12
8090
实践-小细节Ⅳ
(一)音视频三方库交叉编译
为什么在讲解音视频之前我需要先讲讲交叉编译呢?因为音视频开发将会涉及到很多三方库,特别是基于C语言的,在iOS和安卓开发中是没办法直接编译这些库,比如常见的MP3音频格式编码LAME,安卓常用的AAC音频格式编码FDK-AAC,视频编解码FFmpeg,等等,都是音视频开发的核心技术。
sweet说好的幸福
2020/12/23
1K0
(一)音视频三方库交叉编译
iOS 静态库.a冲突解决
从图中可以知道我去了哪里(前面面试总结文章有人好奇)。 回到正题,以前我是有过专门做SDK的经验,所以像这种sdk报错遇到的不少,如图有价值也很明显的问题点在于:
清墨
2019/07/01
2.1K0
iOS 静态库.a冲突解决
相关推荐
armv6、armv7、armv7s、arm64 与开发静态库(.a)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验