首页
社区
课程
招聘
[注意]gikdbg.140319.1无法调试armv7的解决办法
发表于: 2014-3-20 11:40 6223

[注意]gikdbg.140319.1无法调试armv7的解决办法

2014-3-20 11:40
6223
各位内测的朋友:
      由于我手上的两台设备都是armv7s的,没有测试到一个逻辑缺陷,导致armv7的设备上打文件补丁的时候有一个Bug:对同时包含armv7和armv7s的Fat文件会错误的保留armv7s为执行部分,导致无法调试,App闪退的问题。

      在发布更新版本之前解决这个问题的办法:用lipo工具手工剔除原始armv7s的部分,只保留armv7为可执行镜像,这样文件补丁就可以正常工作了。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
顶起,顺带普及下。

ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的。

armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的。如iPhone4S CPU支持armv7, 但它同时兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。同理iPhone5 CPU支持armv7s,它虽然也兼容armv7,但是却无法进行相关的优化。

armv6设备:iPhone, iPhone2, iPhone 3G,第一代、第二代iPod Touch

armv7设备:iPhone 3GS, iPhone 4, iPhone 4S

                    iPad , iPad 2,  the new iPad

                    iPod Touch 3G, iPod Touch 4

armv7s设备:iPhone 5

只有在目标设备上,才会执行设备对应的指令集。

如果在工程Build Setting的Architectures 中的“Build Active Architecture Only”选择为YES,则即使你设置成armv7 , armv7s同时支持,也只会编译对应指令集的包;若选择NO,则编译器会整合两个指令集到一起,此时的包比较大,但是能在iPhone5上使用armv7s的优化,同时也能适配老的设备。一般都是Debug时“Build Active Architecture Only”选择YES,用当前的架构看代码逻辑是否有问题;而在Release时选择NO,来适配不同的设备。

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

因此如果一些程序中使用的静态库不支持armv7s,而你的工程支持armv7s时,就会出现“xxxx does not contain a(n) armv7s slice:xxxxx for architecture armv7s"的编译错误,想要解决这个问题,有两个方法:

1.如果是开源的,能够找到源代码,则可以用源代码重新打一个支持armv7s的libaray, 或者在工程中直接使用源代码,而不是静态库。

2.如果不是开源的,要么就坐等第三方库的支持,要么就暂时让你的工程不支持armv7s.
2014-3-20 14:01
0
雪    币: 1662
活跃值: (3569)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
你在不在内测群头?我有更新的内容发给你,貌似你armv7的设备最多,看看bug是否修复。
2014-3-20 15:01
0
雪    币: 70
活跃值: (74)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
LZ,"用lipo工具手工剔除原始armv7s的部分"如何操作?我操作失败了
2014-3-28 10:43
0
游客
登录 | 注册 方可回帖
返回
//