iOS 两个静态库存在同名文件冲突解决方案
2014-02-27 10:05
330 查看
之前在做项目时,遇到了两个静态库中存在base64.o文件冲突(支付宝SDK与QQ分享SDK),在网上查找了各种资料,最后决定把其中一个.a文件的base64.o文件拆分出去,再重新打包静态库,但最后没能成功,附上静态库一些终端操作:
1.查看文件的架构有哪些 $ lipo -info AlipayRsaLib.aArchitectures 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后面为静态库文件路径,根据自己项目对应路径)
1.查看文件的架构有哪些 $ lipo -info AlipayRsaLib.aArchitectures 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后面为静态库文件路径,根据自己项目对应路径)
相关文章推荐
- iOS 静态库冲突 两个不同的.o 文件冲突 ,静态库分离
- iOS 静态库冲突 两个不同的.o 文件冲突 ,静态库分离
- 关于ios 三方库文件冲突解决方案
- 微软开发的两个动态库存在后门允许用户查看ASP文件源程序和下载整个网站
- 静态库符号文件冲突的解决办法,已实践OK, mark
- iOS button和tap手势冲突 解决方案
- jsp-api.jar文件 与tomcat中同名包冲突出现 java.lang.NullPointerException
- 【iOS】IOS 4.2 编写通用的静态库.a文件
- iOS生成同时支持armv7,armv7s,i386的静态库.a文件
- iOS静态库文件(.a)生成
- 浅谈iOS开发.a静态库的打包(包括打包的文件中用到了一些别人的三方库和分类的处理)
- 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案
- iOS项目引用静态库文件.a
- svn上传.a文件失败的解决方案iOS
- git的patch---解决二进制文件冲突----生成某个文件的patch-----合并一个patch-----查看某个文件的历史---比较两个文件
- 两个目录中,删除其中一个目录中同名文件的做法
- iOS SVN Cornerstone中添加.a 静态库文件
- iOS从静态库里读取文件
- Discuz!NT静态文件缓存(SQUID)解决方案 推荐
- iOS解压静态库.a文件