关于 xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误

看这里 http://www.cnblogs.com/cocoajin/p/3917709.html

之前提到了两种方式;

一种是修改xcode编译选项;一种是在打包时去掉一方;

今天有第三种方式;

直接使用ar命令在其中一个包中删除指定的重复编译的.o文件;

如下场景演示

静态库libTaobao.a 里面编译有CEO.m 文件并且有 ceo方法

静态库libBaidu.a 里编译有CEO.m 文件并且有ceo方法

那么当上面的两个静态库出现在同一个项目中时,并且other link flag 为 -all_load时,就会出重复编译错误!

从上图我们可以看出就是CEO.o 这个文件重复编译了,那么从上面两个库其中任意一个去掉即可

本次的解决思路:

1. 使用lipo 分别将.a拆分

2. 使用ar命令删除其中一个.a的冲突的.o

3. 使用lipo 合并

如下演示,

cocoaPro:lib-taobao cocoajin$ ls
libTaobao.a
cocoaPro:lib-taobao cocoajin$ lipo -info libTaobao.a
Architectures in the fat file: libTaobao.a are: armv7 arm64
cocoaPro:lib-taobao cocoajin$ lipo libTaobao.a -thin armv7 -output tbv7.a
cocoaPro:lib-taobao cocoajin$ lipo libTaobao.a -thin arm64 -output tb64.a
cocoaPro:lib-taobao cocoajin$ ls
libTaobao.a tb64.a tbv7.a
cocoaPro:lib-taobao cocoajin$ lipo -info tb*
input file tb64.a is not a fat file
input file tbv7.a is not a fat file
Non-fat file: tb64.a is architecture: arm64
Non-fat file: tbv7.a is architecture: armv7
cocoaPro:lib-taobao cocoajin$ ar -d tbv7.a CEO.o
cocoaPro:lib-taobao cocoajin$ ar -d tb64.a CEO.o
cocoaPro:lib-taobao cocoajin$ lipo -create tbv7.a tb64.a -output libTaobao.a
cocoaPro:lib-taobao cocoajin$ lipo -info libTaobao.a
Architectures in the fat file: libTaobao.a are: armv7 arm64
cocoaPro:lib-taobao cocoajin$

最后替换去掉CEO.o的库之后,工程编译通过,运行正常!

使用ar命令删除iOS静态库重复编译的.o文件的更多相关文章

  1. iOS - 静态库的导入和头文件路径的设置

    开发过程中,免不了要用到一些第三方或者是别人写好的一些Demo,这时就经常会用到别人写的一些静态库(.a文件)和n多个头文件(.h文件),这些文件不是简单地把它们拉到自己的工程里面就行的,还要设置一些 ...

  2. iOS 静态库,动态库与 Framework 浅析

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  3. iOS静态库.a总结(2017.1.24增加脚本打包方法)

    修改于:2017.1.24 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImag ...

  4. iOS静态库相关-封装lib

    来源:http://blog.csdn.net/zsomsom/article/details/9163635 Library介绍 基本知识 在实际的编程过程中,通常会把一些公用函数制成函数库,供其它 ...

  5. iOS 静态库,动态库与 Framework

    iOS 静态库,动态库与 Framework     静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢 ...

  6. iOS - 静态库的创建与使用

    在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来 ...

  7. IOS静态库

    如何在Xcode中创建C++静态库 http://jingyan.baidu.com/article/03b2f78c111fca5ea237ae26.html iOS 如何创建和使用静态库 http ...

  8. iOS静态库小结--(yoowei)

    准备知识: 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImage.AFNetw ...

  9. iOS静态库.a文件制作和导入使用

    iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Stat ...

随机推荐

  1. 2016年12月2日 星期五 --出埃及记 Exodus 20:23

    2016年12月2日 星期五 --出埃及记 Exodus 20:23 Do not make any gods to be alongside me; do not make for yourselv ...

  2. 监控windows服务,当服务停止后自动重启服务

    近期花时间研究了一下windows和linux下某服务停了后自动重启的功能,在网上收集了些资料,并经过测试,在此整理一下.这里介绍的是windows服务的监控,是通过批处理来实现的.本例是监控wind ...

  3. flume+hadoop

    摘自:http://www.kankanews.com/ICkengine/archives/130646.shtml

  4. flume系列之—flume ng使用demo

    摘自:http://rjhym.blog.163.com/blog/static/28130232201263042013972/

  5. Redis基础

    Redis是开源的,支持网络.可基于内存也可持久化的key-value数据库,支持主从复制,读写分离,支持5种基本数据类型,高并发性能 安装redis数据库 下载:http://redis.io/do ...

  6. 【Java】List集合按数量分组

    有时候,我们需要将大的集合按指定的数量分割成若干个小集合.(比如:集合作为SQL中IN的参数,而SQL又有长度限制,所以需要分批分几次进行查询) 虽然此需求感觉不常见,但偶也写过几次类似的方法,故记录 ...

  7. 使用js实现移动设备访问跳转到指定目录

    最近最项目的时候总会同时做pc站点跟手机站点,当手机访问的时候默认是看到pc站点的,需要在url上加上/mobile才能正常访问,这段代码是我同事分享给我的,还是蛮实用的. CODE function ...

  8. mfc线程

    1.生成线程 方式1. HANDLE hthread; //线程句柄 hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadFunc,NU ...

  9. CodeForces 651B Beautiful Paintings 贪心

    A. Joysticks time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  10. getbyclass

    其实以前我偷偷学习正则表达式的时候,写过一个getbyclass的方法,最近翻了翻到处都是错,或者好多重复的,没有用的 代码,于是显得没事我就把这个精简了一下,其实这个方法现在我觉得也是有问题的,问题 ...