iOS CPU架构指令集

一.是什么?

CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。

二.种类

ARM公司: arm架构
intel公司: intelx86系列架构
AMD公司: amdx86系列架构

电脑: 一般是x86 / x64
手机: 一般是arm (微处理器,功耗低,体积小)

32位: intel的x86系列 / ARM的armv7 armv7s系列
64位: intel的x64系列 / ARM的arm64系列

三.iOS手机支持类型

arm64:iPhone5S| iPad Air| iPad mini2(iPad mini with Retina Display)
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone3GS|iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch(一般不需要去支持)

四.查看静态库/动态库的CPU指令集

进入动态库文件夹下.使用lipo -info命令

image.png

动态库和静态库都是一样的命令.

只是动态库是查看GXHome.framework文件夹下的GXHome可执行文件

静态库是查看GXHome.a文件

五.查看静态库/动态库的

image.png

查看该静态库/动态库的符号表 (所谓符号.即函数/全局变量.)

六.常识

X86-64简称x64. 都是64位的.

X86-32简称x86,是一个系列(如80186,80286,80386) .都是32位的.

  • i386: 即intel80386.是intel公司的一款x86系列CPU.发布于1985年10月17日.将PC从16位时代带入了32位时代.

七.解决问题

问题一.undefined symbols for architecture x86_64

image.png

没有定义x86_64指令集下的GXPhoneTouchEventVCTest符号表.

这个时候就可以进行一下步骤去排查错误.

步骤1.使用lipo -info 命令去查看这个动态库/静态库是否包含了x86_64的指令集.

如果没有.就在Xcode -> Build Settings -> Architectures -> 里查看是否没加上x86_64这个指令集

image.png
步骤2.使用nm命令查看这个动态库/静态库里是否包含GXPhoneTouchEventVCTest这个符号

如果没有.就在工程里找到GXPhoneTouchEventVCTest这个类.

在Xcode的右边栏查看target membership是否勾选.

image.png
步骤3.查看在该类的.m里是否实现了这个类的@implementation.
步骤4.查看是否embedded和linked这个动态库/静态库
image.png

推荐阅读更多精彩内容