我们在用到第三方的静态库或者自己以前写的静态库时,在iPhone5,ipad4 上面经常会报错,下面
ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /zhangyg/XXX/XXX/libs/libxxx.a for architecture armv7sclang: error: linker command failed with exit code 1 (use -v to see invocation)
这个解决方法有几种,有山寨的,有专业的。
山寨的就是在你引用静态库的工程设置里面(上图)设置下不要添加armv7s,这个方法是治标不治本,所以建议不要使用。
我们还是彻底来解决他吧。
下面就是具体方法:
我们新建的静态库工程,设置为
然后这样我们bulid一次,生成的xxx.a文件我们用命令看一下是:
用命令查看下:lipo -info xxxx.a
这样只有armv7,在新的apple 设备上肯定会报错,不支持armv7s。
那我们简单的,做一个设置,也是最重要的设置就是Build
这样我们继续在bulid一次,然后在看一下
lipo -info xxxx.a
这样就多了一个 (cputype (12) cpusubtype(11) ),看见这个你可能还很纳闷,为什么还没有armv7s,其实这里的 (cputype
(12) cpusubtype(11) )就是armv7s。
这样我们在选择模拟器bulid一次。
lipo -info xxxx.a
这次目标结构变为了 :i386,ok了。
然后我们用命令合一下这二个静态库 就ok了
lipo -create 模拟器.a 真机.a -output 目标地址/最终.a
我们可以查看下:lipo -info 最终.a
这样就包含了模拟器和真机都可以运行的静态库了。
然后最终.a这个静态库发布出去或者给第三方用就没问题了。