duplicate symbol问题解决方法

最近想对工程目录的结构简单的整理一下,删除一些没用的文件及文件夹,发现其中有一个文件夹A下面套了一个名字相同的文件夹A,就想删除这个无用的文件夹层级,接下来是一系列操作:

1)复制子文件夹A到父文件夹A的同一级目录,替换原有的文件夹A;

2)Add Files to 将文件夹添加到工程中;

3)commond+r.

Build Failed!

错误提示duplicate symbol XXX in :XXX /ProjectPath/somelib.a(SBJSON.o),编译时有重复的.o文件SBJSON.o,原来是文件夹A底下包含了SBJSON相关的文件,而工程中引用的第三方静态库也包含了SBJSON,编译的时候相互冲突了,网上搜索到一个解决办法点击打开链接

1)如果是两个静态库冲突的话,可以将两个.a静态库解压,删除其中一个里面重复的.o文件,然后用lipo命令合并两个静态库;

lipo –create libA.a libB.a –output libTarget.a

2)如果是像我这样,工程文件和静态库冲突的话,报错会显示XXX.o文件,那么就在Build Phrase里面搜索这个类名(本例中是SBJSON),把显示出来的那几个 .m文件给remove掉就OK(本例中是SBJSON.m),或者在Xcode左侧,工程文件目录结构中找到.m文件,选中并将Target Membership的勾选去掉,效果一样;

3)进行2中的操作之后,说明该文件已经无用,可以删除之,是否删除请视实际情况而定.

这里,有一点需要注意,虽然冲突的.o文件是由相同名字的.m文件编译所得,但有可能被修改过.

看到这里,大家有没有留意一个奇怪的问题,调整文件夹A结构之前,运行没有问题,调整之后,编译失败,困惑了好久,以为是工程设置里面,搜索路径之类的问题,最后发现,调整之前SBJSON.m文件的Target Membership没有勾选,Add Files to一份拷贝的文件夹之后,默认选中了Target Membership.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值