支付宝AlipayRsaLiba中删除base64o

独奏

技术分享|2014-10-25|最后更新: 2023-2-23|
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给删除掉了

参考