在引入第三方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)库冲突解决办法的更多相关文章

  1. jQuery库冲突解决办法

    一次面试中面试官问到jQuery解决怎么冲突?虽然以前看过,但是我已经不记得了. 我的思路就是如果让我来设计,那我就用一个默认值$,不传参数,那就用$,最后就挂载在window.$上,传参数就用传入名 ...

  2. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  3. Git应用--04遇到冲突解决办法git stash(转载)

    git merge git pull时候遇到冲突解决办法git stash https://www.cnblogs.com/juandx/p/5362723.html 在使用git pull代码时,经 ...

  4. c++调用动态库失败解决办法

    c++调用动态库失败解决办法 之前写好的程序今天早上过来发现在服务器上出错了,于是就各种查问题,整整一个早上外加下午两个小时都在查这个问题,最终被我找到了问题: 在程序中我发现LoadLibrary( ...

  5. Jquery库及其他库之间的$命名冲突解决办法

    首先我们应该知道,在jquery中,$(美元符号)就是jquery的别名,也就是说使用$和使用jquery是一样的,在很多时候我们命名空间时,正是因为这个$而产生的冲突的发生.比如说:$('#xmla ...

  6. .Net Framework项目引用.NetStandard标准库出现版本冲突解决办法

    今天在工作中出现一个引用问题,害我找问题找了很久.起因是在一个Winform项目下需要引用一个.NetStandard标准库,标准库引用了System.ComponentModel.Annotatio ...

  7. 配置自己的OpenGL库,glew、freeglut库编译,库冲突解决(附OpenGL Demo程序)

    平台:Windows7,Visual C++ 2010 1. 引言 实验室的一个项目,用到OpenGL进行实时绘制,还用到一些其他的库,一个困扰我很久的问题就是编译时遇到的各种符号未定义,符号重定义之 ...

  8. AndroidStudio打包apk,安装出现签名冲突--解决办法

    Android UiAutomator2项目部署到jenkins上,实现自动打包,并自动push&安装到设备上 遇到问题: 可成功实现自动打包并push到设备上后,install -r 的时候 ...

  9. pycharm每次新建项目都要重新安装一些第三方库的解决办法(转载防删)

    目前有三个解决办法,也是亲测有用的: 第一个方法:因为之前有通过pycharm的project interpreter里的+号添加过一些库,但添加的库只是指定的项目用的,如果想要用,就必须用之前的项目 ...

随机推荐

  1. 利用ant脚本 自动构建svn增量/全量 系统程序升级包

    首先请允许我这样说,作为开发或测试,你一定要具备这种 本领.你可以手动打包.部署你的工程,但这不是最好的方法.最好的方式就是全自动化的方式.开发人员提交了代码后,可以自动构建.打包.部署到测试环境. ...

  2. [MongoDB]增删改查

    摘要 上篇文章学习了mongodb在windows上的安装,以及如何开启mongodb,最后列举了简单的增删改查操作.本篇将继续深入学习一下增删改查. 相关文章 [MongoDB]入门操作 CRUD ...

  3. What is the most common software of data mining? (整理中)

    What is the most common software of data mining? 1 Orange? 2 Weka? 3 Apache mahout? 4 Rapidminer? 5 ...

  4. PHP弹出提示框并跳转到新页面即重定向到新页面

    本文为大家介绍下使用PHP弹出提示框并跳转到新页面,也就是大家所认为的重定向,下面的示例大家可以参考下   这两天写一个demo,需要用到提示并跳转,主要页面要求不高,觉得没必要使用AJAX,JS等, ...

  5. 第2月第3天 egorefresh

    egorefresh是很老的下拉刷新,它是一个uiview,在uitableview 下拉的时候显示不同的界面. egorefresh和uitableview的耦合度很高,uitableview滚动和 ...

  6. JS快速获取图片宽高的方法

    快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器. 我们一步一 ...

  7. ASP.NET实现验证码

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  8. Fedora 25 Alpha版本今天发布啦

    时隔Fedora 24发布后的3个月,Fedora项目团队非常开心的宣布任何感兴趣的用户都能下载和测试即将到来的Fedora 25操作系统的Alpha预发布版本,在Fedora 25 Alpha里程碑 ...

  9. 设计模式(15)-Facade Pattern

    http://www.cnblogs.com/zhenyulu/articles/55992.html 一. 门面(Facade)模式 外部与一个子系统的通信必须通过一个统一的门面(Facade)对象 ...

  10. Xcode 6制作动态及静态Framework和各种坑

    Xcode 6制作动态及静态Framework http://www.cocoachina.com/ios/20141126/10322.html 有没有写SDK或者要将一些常用的工具类做成Frame ...