iOS两个静态库存在同名文件冲突解决方案-创新互联

之前在做项目时,遇到了两个静态库中存在base64.o文件冲突(支付宝SDK与QQ分享SDK),在网上查找了各种资料,最后决定把其中一个.a文件的base64.o文件拆分出去,再重新打包静态库,但最后没能成功,附上静态库一些终端操作:

10年积累的网站设计制作、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有澄城免费网站建设让你可以放心的选择与我们合作。

1.查看文件的架构有哪些

  $ lipo -info AlipayRsaLib.a

Architectures in the fat file: libzbar.a are: armv7 (cputype (12) cpusubtype (11))  i386

可以看到静态库中bao'h包含了三种cpu架构的.a文件 armv7 armv7s即(cputype (12) cpusubtype (11)) i386(模拟器)

2.将armv7解压出来(armv7替换成i386即可解压i386格式.a)

 lipo AlipayRsaLib.a -thin armv7 -output AlipayRsaLib-armv7.a

3.新建立一个文件夹出来存放解压的(.o)文件

 $ mkdir armv7

 $ cd armv7

4.将静态库中的文件解压

 $ ar -x ../AlipayRsaLib-armv7.a

在完成上述步骤后,我们要把其中的base64.o文件移除,再把其余的.o文件重新打包成对应cup框架的.a文件

5.合并完后进行打包.o文件了

$ libtool -static -o ../libnew-armv7.a *.o

6.合并静态库

$ lipo -create  libnew-armv76.a  libi386.a  -output  AlipayRsaLib.a

本来以为这样就可以解决冲突问题,后来打包时才发现armv7s (cputype (12) cpusubtype (11))架构的.a文件无法拆分出来,上面打包的静态库不包含armv7s格式,在iphone5后面版本的真机上部分功能将失效,既然这个方法行不通,那就只能另想其它方案了。于是继续在网上查找资料,最后了解到网上的对Build Settings——Other Linker Flags配置解释:

  all_load就是会加载静态库文件中的所有成员,-ObjC就是会加载静态库文件中实现一个类或者分类的所有成员,-force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用

  在拿不到静态库源码情况下 ,只能采用-force_load+库文件路径方法设置Other Linker Flags,逐个加静态库,最终完美解决,发现那个静态库无法调用,就采用以下语句添加进去。

-force_load EightPartyCall/standaloneclass/BaiduSocialShare/WX/libWeChatSDK

(-force_load后面为静态库文件路径,根据自己项目对应路径)

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:iOS两个静态库存在同名文件冲突解决方案-创新互联
网页地址:http://pwwzsj.com/article/dgdosj.html