【转】XCode: duplicate symbol 解决方案
遇到引用库重复定义的问题,需要解决。 项目需要,同时引用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_load ios的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 i386 Then 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.a You 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 *.o And 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.a This 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的部分从任意一个类库中删除,你可以相应的修改这个过程。
【转】XCode: duplicate symbol 解决方案的更多相关文章
- XCode: duplicate symbol
		
XCode: duplicate symbol 2013-05-27 17:28:21| 分类: iOS|字号 订阅 遇到引用库重复定义的问题,需要解决. 项目需要,同时引用ZBar和Q ...
 - 转--xcode duplicate symbol问题
		
遇到引用库重复定义的问题,需要解决. 项目需要,同时引用ZBar和QQ授权登录SDK,由于二者均使用了Base64处理数据,XCode编译时报错: duplicate symbol _base64 ...
 - xcode duplicate symbol _GAD_MD5 解决方法
		
添加了mobi的广告平台后,在Device状态打包时,出现此错误. duplicate symbol _GAD_MD5 in: 解决方法: Targets ->Build Setting 中设 ...
 - 友盟分享和cocos2dx符合重复duplicate symbol 解决方案
		
最近使用友盟分享的sdk,没想到libWechatSDK.a居然和cocos2dx的符合冲突,提示base64.o重复了. 于是到网上找了一下解决方案,基本上去除微信的base64.o即可了. 用ar ...
 - xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误
		
xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误 一:场景 xcode 同时引入了 libA.a, libB.a 两个静态类库,如果 这两个静态类库之中 ...
 - Xcode工程编译之duplicate symbol问题引发的一些知识
		
概括: 文件中重复定义了一个函数.变量(比如全局变量) 工程中包含同名的文件. 一般的解决方法 1 在使用import 引入头文件时,由于疏忽,误引入.m 文件. 2 同名文件放在不同的文件夹下. 3 ...
 - [问题]编译报错:clang: error: linker command failed with exit code 1及duplicate symbol xxxx in错误解决方法之一
		
今天添加了一个新类(包括m,h,xib文件),还没有调用,-编译遇到如下错误,根据错误提示, duplicate symbol param1 in: /Users/xxxx/Library/Devel ...
 - [报错]编译报错:clang: error: linker command failed with exit code 1及duplicate symbol xxxx in错误解决方法之一
		
今天添加了一个新类(包括m,h,xib文件),还没有调用,—编译遇到如下错误,根据错误提示, duplicate symbol param1 in: /Users/xxxx/Library/Devel ...
 - C语言调试过程中duplicate symbol错误分析
		
说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...
 
随机推荐
- tcp为什要三次握手
			
准备知识: 单工:信息只能单向传递.发送-->接收,单向,不能返回响应. 双工:指的是信息可双向发送. 全双工:信息可同时双向传递. 半双工:不能同时,单行道,一边传输完了,另一边才能发起传输. ...
 - Unity 学习资源
			
NGUI文档及视频: http://www.tasharen.com/forum/index.php?topic=6754 动态更新的解决方案: http://game.ceeger.com/foru ...
 - suricata学习笔记1--初步认识
			
1.前言 最近工作需要对网站的关键字进行检测,找出敏感词.这个过程需要对报文进行收集.解码.检测和记录日志.当前只是简单实现功能,根据关键字进行简单的匹配,而没有进行关键字的语义分析.导致的结果就是 ...
 - js-数据类型
			
js中有5种数据类型:Undefined.Null.Boolean.Number和String.还有一种复杂的数据类型Object,Object本质是一组无序的名值对组成的. 一.数据类型 1.und ...
 - TortoiseSVN的bin目录下面没有svn.exe
			
自己在idea联合svn时遇到这个问题,然后bd和gg,发现很多人都乱说,说什么TortoiseSVN是客户端,默认不包含svn.exe,需要安装Subversion.bullshit! 之所以没有, ...
 - Struts 2常用的Ajax标签
			
Struts 2对Ajax的支持 •Struts 2对Ajax提供了很好的支持 –Struts 2.1提供了基于Dojo的Ajax标签,对Ajax操作进行了进步封装,可以更快捷容易的使用Ajax ...
 - P6 EPPM手动安装指南(Oracle数据库)(一)
			
P6 EPPM手动安装指南(Oracle数据库) P6 EPPM Manual Installation Guide (Oracle Database) 1. 内容... 1 1.1. ...
 - 利用name或id属性设置页面跳转的锚点
			
理论准备 网页中的链接按照链接路径的不同,可以分为3种类型,分别是内部类型.锚点链接和外部链接: 按照使用对象的不同,网页中的链接又分为文本超链接,图像超链接,E-ma ...
 - fibonacci数列从a到b的个数
			
Description 我们定义斐波那契数列如下: f1=1 f2=2 f(n)=f(n-1)+f(n-2)(n>=3) 现在,给定两个数a和b,计算有多少个斐波那契数列中的数在a和b之间( ...
 - 【Asphyre引擎】发布了新版本V101
			
引擎简称还是PXL,但是这个P是Platform而不是Pascal. 修复了一些bug,增加了轻量级的随机数发生器,进一步完善了XML的解析. 不是很明白,为何把Pascal扩展库改成Platform ...