一、如果类库生成的构架和对应设备的构架不一致,会链接报错

如果项目中使用类库后,遇到形似Undefined symbols for architecture x86_64(x86_64架构下有未定义的符号)的错误,则为链接错误,该错误只有两种情况:

1> 项目中没有导入指定的类库

2> 项目中使用的类库架构(类库生成的设备)和运行项目的设备不同

二、CPU构架:

1、精简指令集构架:主要用于移动设备,手机/平板,代表厂商:ARM、IBM

2、复杂指令集构架:主要用于PC,代表厂商:Intel、AMD

三、iOS中涉及的架构:

1、真机:

armv7:               iPhone4s

armv7s:             iPhone5、iPhone5C

arm64/armv8:    iPhone5s及以上

2、模拟器:

i386:                  iPhone4s、iPhone5、iPhone5C

x86_64:             iPhone5s及以上

四、开发中,使用类库时:

1、标明不同设备类型使用不同的类库,自己选取

2、合成构架(即把5个.a文件合成一个.a,无需考虑设备类型问题,缺点:APP包会比较大)

五、怎么查看类库的构架呢?

使用命令行工具 lipo -info .a的文件路径

六、那怎么合成构架呢?

1、使用命令行工具 lipo -create 类库文件1路径  类库文件2路径  -output  生成的类库路径

示例:lipo -create  XX/XX/XX.a  KK/KK/KK.a  -output  ZZ/ZZ/ZZ.a

如果:ZZ/ZZ/ZZ.a  直接写ZZ.a,生成的类库在家目录下

2、对Xcode进行设置,自动生成合成构架的类库文件

但是:1、设置后,只能生成真机或模拟器的类库

2、生成真机的合成架构时,默认没有armv7s类型的 -> 修改设置来添加armv7s类库

    3、再使用方式1对真机和模拟器的构架类库进行合成

    4、比方式1的好处:方法1需要手动合成4次,方法2只需要手动合成1次

.a静态库构架合成-LMLPHP

添加armv7s类库设置:

1、.a静态库构架合成-LMLPHP

2、.a静态库构架合成-LMLPHP

05-11 17:21