type
Post
status
Published
date
Oct 25, 2014
slug
summary
tags
iOS
category
技术分享
icon
password
由于目前项目中集成了支付宝和 ZBar 二维码库,支付宝的
AlipayRsaLib.a
与 ZBar 的 base64.o
同名,导致编译不通过。搜索后发现这个冲突似乎是不光在他俩之间,在百度地图SDK以及 TencentOpenAPI 中都存在类似冲突。 在支付宝论坛中查找后得知 AlipayRsaLib.a
并不依赖 base64.o
,因此我们可以把 base64.o
从中删除。下面是从
AlipayRsaLib.a
中删除 base64.o
的操作。1. 查看.a文件支持的 CPU 架构
lipo -info AlipayRsaLib.a# 输出:Architectures in the fat file: AlipayRsaLib.a are: armv7 armv7s i386
2. 按照平台拆分.a文件
lipo AlipayRsaLib.a -thin armv7 -output AlipayRsaLib-armv7.alipo AlipayRsaLib.a -thin armv7s -output AlipayRsaLib-armv7s.alipo AlipayRsaLib.a -thin i386 -output AlipayRsaLib-i386.a
拆分后的.a文件分别放到不同文件夹下。
在网上看到
lipo -thin
命令不支持 armv7s 的,这个我并没有遇到,可以看看lipo info
是否有输出 armv7s 有的话应该就是可以拆分出来的,我是可以正常拆分的。3. 解压拆分后的.a文件
ar -x AlipayRsaLib-armv7.aar -x armv7s/AlipayRsaLib-armv7s.aar -x AlipayRsaLib-armv7s.a
注意:上面三个命令是分别在三个不同的文件夹下执行的
解压后可以删除对应的.o文件,这里删除的是
base64.o
。注意要在三个文件夹里吧这个文件全部删除4. 合并解压后的.o文件
libtool -static -o ../libnew-i386.a *.olibtool -static -o ../libnew-armv7.a *.olibtool -static -o ../libnew-armv7s.a *.o
注意:上面三个命令同样是分别在三个不同的文件夹下执行的
5. 合并重新生成的.a文件
lipo -create -output lib.a libnew-armv7.a libnew-armv7s.a libnew-i386.a
至此我们就把AlipayRsaLib.a中的base64.o给删除掉了