旧工程适配iOS 6和iPhone 5之第三方静态库

如果你的工程没有使用第三方的静态库或者framework,那么看完旧工程适配iOS 6iPhone 5的一些故事基本上适配也就结束了,可是像笔者这样有的工程里用到第三方库了,打包的时候还会提示下面的问题:

1
2
 ld : file is universal  ( 3 slices ) but does not contain a (n ) armv7s slice :  /Users /mac4 /Desktop /my desktop /My app /MyApp name  20 :09 : 12   /MyApp name /ZBarSDK /libzbar.a  for architecture armv7s
clang : error : linker command failed with  exit code  1  (use  -v to see invocation )

上面的提示就是我使用的libzbar这个库不支持armv7s。
关于第三方库,如果是闭源的,像一些广告的SDK以及合作方提供的SDK就只能等了,人家啥时候更新啥时候算。像我遇到的ZBarSDK,这种第三方开源的SDK,就不要等了,还是自已动手丰衣足食吧。
首先关于闭源的库,一个临时的解决办法就是,先取消对armv7s的支持,这样就可以不用等第三方的库就开始测试了,办法是:
在Xcode里,点击相应的Target,然后点Build Settings,找到VALID_ARCHS,然后删除里面的arvm7s,就可以了。

ok,上面只是临时解决办法,说正事儿。以编译ZBar为例:
1.去Zbar的主页,下载源码包。
2.解压以后,进入里面的iPhone文件夹,删除里面的Examples,双击zbar.xcodeproj运行工程。
3.Command+B编译工程(当然了这一步会提醒更新Setting,建议更新完以后再运行)。


4.然后在lib上点右键去目录里找喽。

ok,本来故事到这里应该就结束了,但是上面找到的那个文件,只能在真机用,模拟器用不了,怎么办呢?
进入到这个工具的Build目录,会看到下面这些目录

1
Debug -iphoneos /          Debug -iphonesimulator /   Release -iphoneos /        Release -iphonesimulator /

自已动手将模拟器的包和真机的包合并一下就好了。

1
2
3
[rainbird@localhost Products ]$ pwd
/Users /rainbird /Library /Developer /Xcode /DerivedData /zbar -athgobfbdtwgftgcogpuwegpawlj /Build /Products
[rainbird@localhost Products ]$ lipo  -create Release -iphoneos /libzbar.a Release -iphonesimulator /libzbar.a  -o libzbar.a

解释一下lipo合并两个库的命令:lipo -create 第一个包 第二个包 -o 合并以后的包
这样的话,得到的libzbar.a就可以同时在模拟器和真机用了。这里有个小插曲,静态库编译一次,会生成所有的包,而我一上来就用的真机上的包,然后模拟器上用不了,又在真机的位置找了半天,以为生成不了模拟器的包,哎,思维定势了。
关于lipo还有一个常用的命令就是查看包的信息-info参数

1
2
[rainbird@localhost Products ]$ lipo  -info libzbar.a 
Architectures  in the fat file : libzbar.a are : armv7  (cputype  ( 12 ) cpusubtype  ( 11 ) ) i386

感谢开发者Rainbird的分享!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值