关于支付宝sdk和百度云推送sdk引入的base64.o编译报错问题

在项目中同时集成支付宝SDK和百度云推送SDK时遇到base64.o编译冲突。尝试删除百度SDK中的base64.h/m文件导致推送功能失效。最终通过移除支付宝库中特定架构下的base64.o文件,并重新打包库,成功解决冲突,实现两者同时正常使用。
摘要由CSDN通过智能技术生成

原先在项目中加入了百度云推送的sdk,看PDF集成的需要base64.h/base64.m的俩文件,之后一直没有没什么问题。直到要在项目中加入支付宝sdk的。按照说明集成配置完的。一编译直接包错了。


四处问了,确定应该是百度推送需要引入的base64.h/base64.m和支付宝sdk里面的AlipayRsaLib里面包含的base.o的一样的冲突。

开始还是想着.a的静态库的动不了那只有试着删除百度sdk引入的俩文件的,但是这俩文件一删除的。直接照成了百度推送的不能使用。。。

所以还是找其它方法的解决。开始也有人介绍如何合并.a的资料但是没接触过还是不敢弄。后来庆幸找到了一哥跟我一样的情况的。网址:点击打开链接,按照上面说的步奏一步步的试下来。开始的时候只移除了i386和armv7里面的base64.o保留了armv7s里面的。发现在模拟器上运行的真的可以编译通过了。但是真机运行还是会报上面的错误的。想想是不是armv7s没有移除的问题的。但是移除了全部的不知道对支付宝sdk的有没有影响的。所以还是和支付宝的客服询问了一下(支付宝客服还是很不错滴)。经过半天的了解。告诉了他们我的情况:在项目中已经加入了base64.h/base64.m的这俩文件的,那么将支付宝AlipayRsaLib.a里的base64.o的移除也是没有影响的。贴图:

所以,索性将armv7s里面的base64.o的一并移除了。再重新打了一个没有包含base64.o的库出来的。将它替换到测试的项目中运行的没有报错。用真机付款成功的也可以正常操作。试了百度推送的也是能正常运行的。


自己拷贝份保存下

(后面就不自己写了,直接copy过来稍加改动了)
    开console,找到要解剖的.a文件,执行下列命令查看库包含的cpu架构代码:
xcrun -sdk iphoneos lipo -info libx.a
Architectures in the fat file: libx.a are: i386 armv7 armv7s  //此处如果直接使用lipo命令看到的会是: i386 armv7 (cputype(12)subcputyp(11))

然后用 xcrun -sdk iphoneos lipo -extract_family armv7 -output libx-inter.a libx.a

分离出arm版本的.a,这里有个小问题,按我的理解此命令应该对包含3种cpu代码的.a里的armv6部分进行操作,而实际分离出来的.a却是同时包含armv7和armv7s的部分,也就是依然是”fat” lib,这样是不能抽出.o的,因此还需要进行以下操作:
lipo libx-inter.a -thin armv7 -output libx-armv7.a lipo libx-inter.a -thin armv7s -output libx-armv7s.a
这样就能分离出2份不同版本arm的.a了,然后进行解.o操作:
ar -x libx-armv7.a
这部操作最好放到单独的文件夹里进行,会将link出.a的所有.o还原出来,然后有两种选择:一是把所有库对应cpu架构的部分都还原到这个位置,然后将重复的部分合并为一份,接着用后面的命令将所有.o再合并为一份公共lib。还有一种选择就是保留重复符号中的一份lib完好如初,将其余lib单独解开,剔出重复符号存在的.o,然后将该lib重新link回.a,以去除重复符号。
不管用哪种方法解决,最后的link回命令如下:
libtool -static -o ../libx-armv7.a *.o

当然,别忘了咱们的库都是有多份cpu架构指令的,所以,先要对每种cpu arch的库进行同样操作,然后还要将thin lib合并回fat lib:
lipo -create -output libx.a libx-armv7.a libx-i386.a libx-armv7s.a
这样,再link回自己的app时就不会再出现duplicate symbol了。 



贴出没有base64.o的AlipayRsaLib.a的地址:点击打开链接(支付宝版本v1.2,以后版本更新了如果修改了要重新按照原先的方法制作一份)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值