IOS lib(.a)库冲突解决办法
在引入第三方lib(.a)库时,经常会由于第三方lib库中又引入同你现有工程相同的开源代码而造成.o冲突,最近在集成汉王名片识别时发生ASIHttp的.o冲突。我想说的是像这种开源的使用率很高的源代码本不应该包含在lib库中,就算是你要包含那也要改个名字是吧。不过没办法现在人家既然包含,我们就只有想办法分离了。
1.依次查看lib库所支持的框架类型。i386:模拟器,armv7:iphone4,armv7s:iphone5,iphone5s,arm64:iphone6,iphone6p。
admin-imac:testlib admin$ lipo -info lib.a
Architectures in the fat file: lib.a are: armv7 armv7s arm64
admin-imac:testlib admin$
fat file:表示该lib库文件中合并了多个框架的lib库,这里合并的有armv7 armv7s arm64。如果同时合并了模拟器的lib库,这里还会有i386的标识。
2.分离出armv7,armv7s类型的.a库
admin-imac:testlib admin$ lipo -extract_family armv7 -output lib_armv7.a lib.a
admin-imac:testlib admin$ lipo -info lib_armv7.a
Architectures in the fat file: lib_armv7.a are: armv7 armv7s
查看发现分离出来的lib_armv7.a仍旧是fat文件,只有Non-fat文件才可以分离.o。所以仍然需要进行进一步分离。
admin-imac:testlib admin$ lipo lib_armv7.a -thin armv7 -output lib_final_armv7.a
admin-imac:testlib admin$ lipo lib_armv7.a -thin armv7s -output lib_final_armv7s.a
admin-imac:testlib admin$ lipo -info lib_final_armv7.a
input file lib_final_armv7.a is not a fat file
Non-fat file: lib_final_armv7.a is architecture: armv7
admin-imac:testlib admin$ lipo -info lib_final_armv7s.a
input file lib_final_armv7s.a is not a fat file
Non-fat file: lib_final_armv7s.a is architecture: armv7s
此时分离出来的已经是Non-fat文件了,才可进行分离.o。
3.分离arm64类型的.a库
arm64是iOS系统最新增加的框架,按照分离armv7,armv7s的方式无论如何都无法分离出arm64版本的Non-fat文件,经过多次试验发现可以通过下面命令直接分离。
admin-imac:testlib admin$ lipo lib.a -thin arm64 -output lib_final_arm64.a
admin-imac:testlib admin$ lipo -info lib_final_arm64.a
input file lib_final_arm64.a is not a fat file
Non-fat file: lib_final_arm64.a is architecture: arm64
4.分离i386(模拟器)类型的.a库
admin-imac:testlib admin$ lipo -extract_family i386 -output lib_final_i386.a lib.a
admin-imac:testlib admin$ lipo -info lib_final_i386.a
input file lib_final_i386.a is not a fat file
Non-fat file: lib_final_i386.a is architecture: i386
5.分离目标文件.o
通过上面的分离则可将armv7、armv7s、arm64、i386框架的lib库一一分离出来,接下来针对每个框架分别创建一个文件夹用来保存从.a库中分离出来的.o文件。下面以armv7为例:
admin-imac:testlib admin$ mkdir armv7
admin-imac:testlib admin$ cd armv7
admin-imac:armv7 admin$ ar -x ../lib_final_armv7.a
其他同理
6.从分离出的.o中删除冲突的.o,再将其余.o文件合并成lib(.o)
admin-imac:arm64 admin$ libtool -static -o ../libarmv7.a *.o
其他同理
7.合并最终的通用静态库
admin-imac:testlib admin$ lipo -create -output libs.a libarmv7.a libarmv7s.a libarm64.a
admin-imac:testlib admin$ lipo -info libs.a
Architectures in the fat file: libs.a are: armv7 armv7s arm64
IOS lib(.a)库冲突解决办法的更多相关文章
- jQuery库冲突解决办法
一次面试中面试官问到jQuery解决怎么冲突?虽然以前看过,但是我已经不记得了. 我的思路就是如果让我来设计,那我就用一个默认值$,不传参数,那就用$,最后就挂载在window.$上,传参数就用传入名 ...
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- Git应用--04遇到冲突解决办法git stash(转载)
git merge git pull时候遇到冲突解决办法git stash https://www.cnblogs.com/juandx/p/5362723.html 在使用git pull代码时,经 ...
- c++调用动态库失败解决办法
c++调用动态库失败解决办法 之前写好的程序今天早上过来发现在服务器上出错了,于是就各种查问题,整整一个早上外加下午两个小时都在查这个问题,最终被我找到了问题: 在程序中我发现LoadLibrary( ...
- Jquery库及其他库之间的$命名冲突解决办法
首先我们应该知道,在jquery中,$(美元符号)就是jquery的别名,也就是说使用$和使用jquery是一样的,在很多时候我们命名空间时,正是因为这个$而产生的冲突的发生.比如说:$('#xmla ...
- .Net Framework项目引用.NetStandard标准库出现版本冲突解决办法
今天在工作中出现一个引用问题,害我找问题找了很久.起因是在一个Winform项目下需要引用一个.NetStandard标准库,标准库引用了System.ComponentModel.Annotatio ...
- 配置自己的OpenGL库,glew、freeglut库编译,库冲突解决(附OpenGL Demo程序)
平台:Windows7,Visual C++ 2010 1. 引言 实验室的一个项目,用到OpenGL进行实时绘制,还用到一些其他的库,一个困扰我很久的问题就是编译时遇到的各种符号未定义,符号重定义之 ...
- AndroidStudio打包apk,安装出现签名冲突--解决办法
Android UiAutomator2项目部署到jenkins上,实现自动打包,并自动push&安装到设备上 遇到问题: 可成功实现自动打包并push到设备上后,install -r 的时候 ...
- pycharm每次新建项目都要重新安装一些第三方库的解决办法(转载防删)
目前有三个解决办法,也是亲测有用的: 第一个方法:因为之前有通过pycharm的project interpreter里的+号添加过一些库,但添加的库只是指定的项目用的,如果想要用,就必须用之前的项目 ...
随机推荐
- hibernate4中取得connection的方法
在hibernate3中,使用了c3p0连接池,尝试了多种办法取得connection对象,以下两种可以使用. Java代码 Connection conn; // 方法1:hibernate4中将 ...
- 为IIS Express添加MIME映射
VS2013自带IIS Express,无法发布JSON文件,需添加MIME映射. 没有图形界面,只能命令行. 进入C:\Program Files(x86)\IIS Express文件夹,输入:ap ...
- java设计模式设计模式
JAVA设计模式之单例模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一 ...
- ASP.NET中最保险最环保的返回404的方法
代码如下: Response.StatusCode = 404; Response.SuppressContent = true; Context.ApplicationInstance.Comple ...
- spring 缓存(spring自带Cache)(入门)源码解读
spring自带的缓存类有两个基础类:Cache(org.springframework.cache.Cache)类,CacheManager(org.springframework.cache.Ca ...
- ACM3 求最值
/*2*2014.11.18*求最值*描述:给定N个整数(1<=N<=100),求出这N个数中的最大值,最小值.*输入:多组数据,第一行为一个整数N,第二行为N个不超过100的正整数,用空 ...
- spring框架搭建url
MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 http://blog.csdn.net/zhshulin/article/details/30779873 MyEclipse下 ...
- Mac Pro 软件收藏
记录下Pro Mac中安装过的软件: 编号 软件名 功能说明 1 QQ 2 微信 3 搜狗输入法 4 Chrome 浏览器 Chrome 及其 插件“个性化设置”备份 5 360云盘 ...
- Java网络编程学习
服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者相互通信.但有时在某个网络中很难将服务器与客户机区分开.我们通常所说的“局域网”(Local ...
- C#获取文件/字节数组MD5值方法
找了很多,就这个管用,有时间好好研究一番 public static string GetMD5Hash(string fileName) { try { FileStream file = new ...