`
jiapumin
  • 浏览: 340773 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)

 
阅读更多

网上流传了太多关于合并lib库的方法,自己也尝试过,但大多失败。有感于这种急于解决问题,经过百般尝试后依旧无果的无奈心情,小翁在这里用一个实例来完整阐述如何在mac中合并lib静态库。

这里以移动广告平台多盟的三个lib库为例子,之所以以此为例子,是因为我也遇到了库冲突的问题,所以才有了本文的内容。

本文的目标:合并libDomobOfferWallSDK.a、libDomobAdWallCoreSDK+UI.a、libDomobAdSDK.a

Let`s begin!

1.依次查看所有需要合并的lib库所支持的框架类型。i386表示支持iphone模拟器,armv6应用在iphone 3gs上,armv7应用在iphone4,armv7s应用在iphone4s以及iphone5,arm64应用在最新的iphone5s上。

1
lipo -info libDomobOfferWallSDK.a<br><br>输出是:Architectures in the fat file: libDomobOfferWallSDK.a are: armv7 armv7s i386
1
其他同理

看到红色粗体的fat了吗,fat file表示这个库里面合并了多于1个框架。

 

2.将lib库拆分出armv7、armv7s、i386类型的.a:

1
lipo -extract_family armv7 -output libDomobOfferWallSDK_arm.a libDomobOfferWallSDK.a

很多人会以为上面这条命令就可以一步到位分离出armv7版本,因为你显式地指出armv7了。但是,你错了。libDomobOfferWallSDK_arm.a仍旧是fat file,也就是里面含有了arm所有版本,这也是网上很多版本的教程错误的原因。如果误以为libDomobOfferWallSDK_arm.a只含armv7一个版本,则下一步的解.o操作就会失败,会提示"is a fat file"。小翁认为,最保险的做法是每次lib变化时都用lipo -info查看一下。现在我们查看一下libDomobOfferWallSDK_arm.a库:

1
2
lipo -info libDomobOfferWallSDK_arm.a
打印出:Architectures in the fat file: libDomobOfferWallSDK_arm.a are: armv7 armv7s

 

接着用如下命令进一步分离出单独的armv7、armv7s版本:(非常重要的步骤)

1
lipo libDomobOfferWallSDK_arm.a -thin armv7 -output libDomobOfferWallSDK_armv7_final.a
1
lipo libDomobOfferWallSDK_arm.a -thin armv7s -output libDomobOfferWallSDK_armv7s_final.a

而对于i386则不用上述那么麻烦,直接用第一句-extract_family指令就能分离出只含i386版本的库:

1
lipo -extract_family i386 -output libDomobOfferWallSDK_i386.a libDomobOfferWallSDK.a

经过上面操作后,我们得到了第一个待合并库libDomobOfferWallSDK.a 的armv7、armv7s、i386三个版本的库。剩下的两个待合并库同理。

 

3.分离出目标文件(.o)

进行实质上的合并。xcode里提示duplicate symbol都是说***.o与***.o冲突。注意,只有非fat file,也就是只含有单种版本的lib库才能分离出.o文件

1
2
3
ar -x ../libDomobOfferWallSDK_armv7_final.a
ar -x ../libDomobAdWallCoreSDK+UI_armv7_final.a
ar -x ../libDomobAdSDK_armv7_final.a

这一步最好是在lib*_final.a的同级目录下新建一个文件夹,专门用来接收解压出来的.o文件。同种版本(如armv7)的都解压到这个文件夹中,相同的.o文件他会自己覆盖掉。

 

4.从.o文件中合并成静态库:

1
libtool -static -o ../libDomobUniversal-armv7.a *.o

armv7s、i386版本同理。

 

5.合并成最终的通用静态库:

1
lipo -create -output libDomobUniversal.a libDomobUniversal-i386.a libDomobUniversal-armv7.a libDomobUniversal-armv7s.a

  

分享到:
评论

相关推荐

    ios 裁剪第三方库脚本

    验证方法是自己做个静态库 ,打一个MBProgressHUD进去 然后在项目中引入这个静态库,尝试在项目中引入MBProgressHUD 造成duplicate symbol 错误,然后运行脚本 裁剪库后修改库名 再次运行,项目能跑通 代表裁剪成功...

    AMap_Android_API_3DMap_Doc.CHM

    com.amap.api.maps.model.animation 动画类,可用于支持动画的覆盖物。 com.amap.api.maps.model.particle 粒子效果类,用于添加粒子效果覆盖物。 com.amap.api.maps.offlinemap 离线地图包,用户可以通过手机...

    Duplicate__Net__Names__Wire解决办法

    Altium Desiigner Duplicate Net Names Wire XXX的终极解决办法 Multiple Top Level Documents

    使用RMAN DUPLICATE...FROM ACTIVE DATABASE 创建物理备库.docx

    使用RMAN DUPLICATE...FROM ACTIVE DATABASE 创建物理备库 简化standby创建过程,提高效率

    Duplicate File Cleaner 2.5.4.168注册码

    Duplicate File Cleaner 2.5.4.168注册码

    Duplicate.Cleaner.Pro.3.2.5 硬盘文件查重工具

    最好用的硬盘文件查重工具,文件整理,删除重复文件,释放硬盘空间

    flash shiti

    10.B 11.B 12.C 13.A 14.D 15.D 16.A 17.A 18.D 19.B 20.A 21.C 22.A 23.C 24.C 25.C 26.D 27.C 28.C 29.D 30.C 31.B 32.A 33.ABCD 34.ACD 35.CD 36.ABCD 37.AB 38.ABCD 39.AC 40.ABCD 41.ABCD 42.ABD 43.AD 44....

    path_duplicate.mel

    maya路径复制mel脚本 path_duplicate.mel

    Easy Duplicate Finder v5.22.0.1058.zip

    Easy Duplicate Finder是一款功能强大重复文件查找工具软件。软件主要用于帮助用户查找出计算机中重复的文件并删除,节省电脑空间。软件界面美观简洁、简单全面、实用方便,无需培训,即可快速上手,轻轻松松完成...

    quora_duplicate_questions.tsv

    quora pairs 一个数据集,判断两个句子是否表达同样的意思

    LTE from A to Z

    1.2.3.4.2 MBMS operation with a SFN.................................................24 1.2.3.4.3 SFN for point to point services..............................................25 1.2.3.5 The Frequency ...

    CIS_Solaris_10_Benchmark_v5.0.0

    2.1 Establish a Secure Baseline .......................................................................................................... 17 2.2 Disable Unnecessary Local Services ......................

    ODIR(Outlook Duplicate Items Remover)

    用于去除 outlook 中重复的项目,如 邮件 联系人 日历 之类的 免费软件,不过官网 http://www.vaita.com 已变了 好像只能用于 outlook 2007 或 outlook 2003 对于 office 2019 没用 关于 outlook 导出 ics 文件,...

    javax.ejb.rar

    javax.ejb.DuplicateKeyException.class javax.ejb.EJB.class javax.ejb.EJBAccessException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb.EJBLocalHome....

    Digging into WordPress.pdf

    1.4.2 A Domain Name ........................................................................18 1.4.3 Web Host / Server ......................................................................18 1.4.4 ...

    解决duplicate_file的自定义脚本react_gradle

    解决duplicate_file的自定义脚本react.gradle文件,替换目录.\node_modules\react-native\react.gradle文件即可

    Vistanita Duplicate Finder

    5. Distribute Vistanita Duplicate Finder in any other form than in the official distribution packages without a written permission from the Author. 6. Use the licensed version of Vistanita Duplicate ...

    Duplicate Cleaner Pro 5.16.0.0一款专业的重复文件查找清理工具(一键安装).exe

    Duplicate Cleaner 支持常规 / 图片 / 视频 / 音频四种搜索模式,可设置文件名称、大小、日期、相似内容、相同内容等过滤条件查找文件、图片、音视频等重复文件,清理重复文件快速彻底。 媒体文件预览 内置简易...

    LTE from A to Z (part1 of 3)

    1.2.3.4.2 MBMS operation with a SFN.................................................24 1.2.3.4.3 SFN for point to point services..............................................25 1.2.3.5 The Frequency ...

Global site tag (gtag.js) - Google Analytics