遇到引用库重复定义的问题,需要解决。项目需要,同时引用ZBar和QQ授权登录SDK,由于二者均使用了Base64处理数据,XCode编译时报错:
duplicate symbol _base64_encode in:
...\libzbar.a(symbol.o)
...\TencentOpenAPI(base64.o)意思就是在这两个库中都定义了_base64_encode,编译器认为你重复定义了。至于为什么编译器认为重复定义,个人认为编译器编译全局变量时会根据名字进行编译,会把相同名称的全局变量编译为相同变量,也就是多个编译成一个,而编译器认为这样可能会引起错误,就提醒用户这里有错。解决方案:参考了:http://blog.sina.com.cn/s/blog_4beb28f301012bl6.html
删掉了 set building->other linker flag-> -all_loadios的Framework是共享动态库,不会被打包到app中,非系统Framework静态库都会被打包到app中,所以会产生"Duplicate Symbol"的错误。
在Build Settings->Other link flags中删除所有的-all_load与-force_load, XCode会很smart的去掉"Duplicate Symbol"。以下是从外国友人那获取的终极解决策略,方案是修改类库:
I'm going to assume that these are two third party libraries that have only provided you with the .a files and not the source code. You can use libtool, lipo and ar on the terminal to extract and recombine the files.
假设有两个三方类库仅提供给你了.a文件,没有源码,你可以通过libtool, lipo和ar在terminal中解压合并他们。
To see what architectures are in the file:
查看文件都支持了什么架构
$ lipo -info libTapjoy.a
Architectures in the fat file: libTapjoy.a are: armv6 i386Then to extract just armv6, for example:
然后只解压armv6,例如
$ lipo -extract_family armv6 -output libTapjoy-armv6.a libTapjoy.a
$ mkdir armv6
$ cd armv6
$ ar -x ../libTapjoy-armv6.aYou can then extract the same architecture from the other library into the same directory and then recombine them like so:
你可以从另一个类库中解压同样架构的部分,然后将两者合并在一起
$ libtool -static -o ../lib-armv6.a *.oAnd then finally, after you've done this with each architecture, you can combine them again with lipo:
如上所示,你可以将所有架构都按照这个流程走一遍,然后合并
$ cd ..
$ lipo -create -output lib.a lib-armv6.a lib-i386.aThis should get rid of any duplicate symbols, but will also combine the two libraries into one. If you want to keep them separate, or just delete the duplicate from one library, you can modify the process accordingly.
这个过程不仅解决掉了duplicate symbols的问题,也将两个类库合并为一个。如果你想分别保存两个类库,你可以将duplicate的部分从任意一个类库中删除,你可以相应的修改这个过程。

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/p/3734751.html,如需转载请自行联系原作者

【转】XCode: duplicate symbol 解决方案相关推荐

  1. 友盟分享和cocos2dx符合重复duplicate symbol 解决方案

    最近使用友盟分享的sdk,没想到libWechatSDK.a居然和cocos2dx的符合冲突,提示base64.o重复了. 于是到网上找了一下解决方案,基本上去除微信的base64.o即可了. 用ar ...

  2. 解决 Xcode下使用公用静态库,出现的Duplicate Symbol错误

    解决 Xcode下使用公用静态库,出现的"Duplicate Symbol"错误 分类: iPhone/iPad开发技术 2013-11-08 14:20  227人阅读  评论( ...

  3. 解决使用CoreData时报duplicate symbol错误问题

    2019独角兽企业重金招聘Python工程师标准>>> 也不知道是那个XCode版本后对CoreData这块做了调整,我用的是XCode8,按照原来的步骤添加了实体,然后通过菜单Ed ...

  4. Duplicate Symbol链接错误的原因总结和解决方法[转]

    from:http://www.cocoachina.com/bbs/read.php?tid=177492 duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的 ...

  5. 链接报错:ld: 1 duplicate symbol for architecture x86_64

    一.问题原因 ld: 1 duplicate symbol for architecture x86_64 出现错误的原因是:重复定义. 完整的报错信息: ld: 1 duplicate symbol ...

  6. c语言调试过程中的错误,C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  7. duplicate symbol _OBJC_CLASS 错误处理方法

    错误: ld: duplicate symbol _OBJC_CLASS_$_************ in **************** **************************** ...

  8. cocos3.4 使用quic-src报错:duplicate symbol _MD5_Final in:

    我在一直quick3.3的东西到cocoslua3.8的时候遇到的一个问题,论坛里的解决方法. 楼主 :发表于: 2015-05-14 16:59   发自: Web Page 倒序阅读   只看楼主 ...

  9. Duplicate Symbol链接错的原因总结和解决方法

    Duplicate Symbol链接错的原因总结和解决方法 duplicate symbol(符号复制,即有相同的文件名)是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在.但是经过一段时 ...

最新文章

  1. 中消协发布2018年春节消费提示
  2. 【剑指offer】设置在最小数目的阵列
  3. 最新综述:图像分类中的对抗机器学习
  4. 数据库连接池的实现及原理
  5. 错误:不能继续进行下一步操作 openfire 设置._如何为MacBook或Mac电脑恢复出厂设置...
  6. 基于spring-boot和elfinder的在线文件管理
  7. 第五周软件工程作业-每周例行报告
  8. python response[200_python – django上的代码200 httpresponse
  9. Android 多级树形菜单
  10. linux shell编程小程序6,shell脚本应用小程序
  11. java if ( 常量==变量)_Java常量、变量和运算符
  12. “由于应用程序配置不正确,应用程序未启动。重新安装应用程序可能会纠正这个问题。”解决思路
  13. 网件使用计算机mac地址吗,网件路由器怎么设置mac地址过滤
  14. ROS串口通信协议解析
  15. 如何用后视镜判断车距
  16. nmake -f ms\ntdll.mak 模块计算机类型“X86”与目标计算机类型“x64”冲突
  17. 感知哈希算法实现以图搜图软件
  18. api 二次 开发 禅道_禅道 Rest API 开发
  19. 四足机器人(一)----MATLAB simulink对四足机器人物理建模
  20. Lisp for Small Prices

热门文章

  1. python第五章课后题答案超星_MOOC网课章节答案_Python 语言程序设计见面课测试答案...
  2. gcp上使用gpu来学习tensorflow
  3. IBM服务器指示灯报警说明
  4. ubuntu下eclipse的svn插件使用javahl
  5. TypeScript 2.1中的类型运算 一个递归的Readonly泛型
  6. SSE图像算法优化系列一:一段BGR2Y的SIMD代码解析。
  7. Nignx平滑升级(1.8.0-1.8.1)
  8. iOS开发-ViewController的生命周期和切换
  9. springboot静态网页放哪里_STEP4.1 第一个SpringBoot项目
  10. 对C语言 static作用——修饰 变量(全局变量/局部变量)、函数