iOS开发笔记

第三方静态库编译:ZBar编译libZbar.a

2019-08-01  本文已影响0人  祥子_HelloWorld

有的工程里用到第三方库了,打包的时候还会提示下面的问题:
ld: file is universal (3 slices) butdoes not contain a(n) armv7s slice:/Users/rainbird/Desktop/myapp/iFileManager/iFileManager/ZBarSDK/libzbar.afor architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to seeinvocation)
上面的提示就是我使用的libzbar这个库不支持armv7s
关于第三方库,如果是闭源的,像一些广告的SDK以及合作方提供的SDK就只能等了,人家啥时候更新啥时候算。像我遇到的ZBarSDK,这种第三方开源的SDK,就不要等了,还是自已动手丰衣足食吧。

首先关于闭源的库,一个临时的解决办法就是,先取消对armv7s的支持,这样就可以不用等第三方的库就开始测试了,办法是:
在Xcode里,点击相应的Target,然后点BuildSettings,找到VALID_ARCHS,然后删除里面的arvm7s,就可以了。



ok,上面只是临时解决办法,说正事儿。以编译ZBar为例:

  1. 去Zbar的主页,下载源码包

  2. 解压以后,进入里面的iPhone文件夹,删除里面的Examples,双击zbar.xcodeproj运行工程。

  3. Command+B编译工程(当然了这一步会提醒更新Setting,建议更新完以后再运行)。


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


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

Debug-iphoneos/ Debug-iphonesimulator/ Release-iphoneos/ Release-iphonesimulator/
自已动手将模拟器的包和真机的包合并一下就好了。

[rainbird@localhost Products]$pwd
/Users/rainbird/Library/Developer/Xcode/DerivedData/zbar-athgobfbdtwgftgcogpuwegpawlj/Build/Products
[rainbird@localhost Products]$ lipo -createRelease-iphoneos/libzbar.a Release-iphonesimulator/libzbar.a -olibzbar.a

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

[rainbird@localhost Products]$ lipo-info libzbar.a
Architectures in the fat file: libzbar.a are: armv7 (cputype (12)cpusubtype (11)) i386
参考资料:
Zbar SDK is not working in iOS6
http://blog.sina.com.cn/s/blog_69a620100102v1j5.html

上一篇下一篇

猜你喜欢

热点阅读