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里的+号添加过一些库,但添加的库只是指定的项目用的,如果想要用,就必须用之前的项目 ...
随机推荐
- 新浪微博客户端(63)-使用block进行链式编程
Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (Person *(^)())study ...
- iOS数据库学习(2)-基础SQL语句
/* 1. 创建一个数据表 */ CREATE TABLE IF NOT EXISTS t_dog (name text, age integer); CREATE TABLE IF NOT EXIS ...
- rational rose 顺序图的消息加数字
主菜单——〉“Tools”——〉“Options”,在弹出的窗口中选择“Diagram”标签-->display-->sequence numbering
- Myeclipse如何关联源码
Myeclipse版本:Myeclipse2014 关联源码前要下载对应的源码,如本例的dom4j-1.6.1.jar,则去下载对应的源码dom4j-1.6.1.zip 如果做的是web项目,就要将该 ...
- jQuery回调、递延对象总结(中篇) —— 神奇的then方法
前言: 什么叫做递延对象,生成一个递延对象只需调用jQuery.Deferred函数,deferred这个单词译为延期,推迟,即延迟的意思,那么在jQuery中 又是如何表达延迟的呢,从递延对象中的t ...
- php缓存技术总结
缓存是指临时文件交换区,电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便.因为缓存往往使用的是RAM(断电即掉的非永久储存), ...
- Book-编程珠玑-第一章
第一章...二〇一六年十月二十五日 22:41:45 1MB存储空间里大约可以存143,000个号码; 如果每个号码都使用32位整数来表示的话,1MB存储空间里就可以存储250,000个号码; 看得迷 ...
- SQLite初试...
string dataPath = "../../UserData.dbx"; //System.IO.Directory.GetCurrentDirectory() + &quo ...
- CocoaPods版本升级
和往常一样使用CocoaPods管理一个基于FMDB的项目类库 命令行执行 $ pod install [!] The 'master' repo requires CocoaPods 0.32.1 ...
- 以下css可以清除浮动
.clearfix:after { content: ""; clear: both; visibility: hidden; display: block; height: 0p ...