cocoapods导致的符号重复问题分析和解决

原创 2015年02月26日 21:42:35


xplayer工程用了Pods,xplayerdemo_pods工程引用xplayer时又用了Pods,导致如下的链接错误:

duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods

类似:
duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods in:
    /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o)
    /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o)
duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods in:
    /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o)
    /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o)
ld: 2 duplicate symbols for architecture i386


**********************尝试删除**********************
一种办法是把demo工程里Link Binary with Libraries里的libPods.a的引用删除即可。
但是这个方法无法用于自动构建,得寻找其他方案。


我们来看符号重复的原因:
xplayer这个静态库工程用了Pods,所以编译链接了Pods-dummy.m文件。


而xplayerdemo_pods又用了Pods,又编译链接了新的Pods-dummy.m文件。
导致了PodsDummy_Pods这个类重复。
所以思路是想办法移除或重命名其中的一个Pods-dummy.m文件。
发现移除是不可行的,会导致无法生成libPods.a。


**********************尝试重命名**********************
现在来试重命名。
首先想到的是将xplayer里的Pods-dummy.m文件重命名,方法如下:
修改xplayer的Podfiles文件
platform :ios, ‘5.0'
target xplayer do
pod 'CocoaHTTPServer', '= 2.3'
pod 'Reachability', '~> 3.0
end


这样xplayer工程生成的dummy类是PodsDummy_Pods_xplayer。
此时Build xplayerdemo_pods工程会报错说PodsDummy_Pods_xplayer这个符号重复了: 这是因为xplayerdemo_pods的Pods包含了xplayer, 生成了第二个PodsDummy_Pods_xplayer类。
如果我们能修改target xplayer do里的”xplayer”为其他字符串就好了,但是目前没有找到这种解决方案。


现在剩下的办法是将xplayerdemo_pods里的Pods-dummy.m文件重命名,方法如下:
修改xplayerdemo_pods的Podfiles文件如下
platform :ios, '5.0'
target :xplayerdemo_pods do #增加target语句
  pod 'xplayer', :podspec => 'http://repo.xx.com/specs/xplayer/0.0.1/xplayer.podspec'
end
这样xplayerdemo_pods工程生成的dummy类是PodsDummy_Pods_xplayerdemo_pods。
这样就不会和xplayer包含的dummy类PodsDummy_Pods重名了。

问题解决。

明年考研外语听力测试成绩占外语初试成绩的20%

明年考研外语听力测试成绩占外语初试成绩的20%从明年起,硕士研究生入学考试的外语科目(非外语专业)除原有的笔试外,将增加听说能力测试。   本报实习记者李莺核实报道 昨天下午,记者与教育部高校学生司取...
  • stanely
  • stanely
  • 2001-06-04 21:40:00
  • 744

使用CocoaPods引入第三方库依赖冲突

问题描述 最近初期就引入了pod ‘MBProgressHUD’, ‘~> 1.0.0’最新的版本,后面由于项目需求需要用到其他第三方库,但当前库中又依赖了MBProgressHUD而且制定了版本号为...
  • leiyu231
  • leiyu231
  • 2016-12-02 18:45:58
  • 3386

CocoaPods 版本管理冲突 解决

近期在项目中首次使用了CocoaPods。从软件工程的角度来看,我对目前常见的CocoaPods使用方法有些意见,建议做一些改进。先说一下我建议的最佳实践,后面再分析为什么要这样做。并且希望大家根据自...
  • shaobo8910
  • shaobo8910
  • 2015-06-26 11:47:56
  • 6473

CocoaPods:在多target中安装相同pod的优雅解决方案

CocoaPods:在多target中安装相同pod的优雅解决方案Xcode7中令人激动的功能之一就是能够进行原生UI测试(感谢苹果),所以我在开发新的Xcode7/Swift2项目时,我把重点放到了...
  • assholeu
  • assholeu
  • 2016-07-22 00:57:46
  • 2349

iOS 开发 - 亲身经历告诉你如何把自己的库通过pod导入(详细步骤)

记得一次面试有人问我有没有自己开源一些库,有是有的,但是确没有制作成可以通过pods导入的库,此乃一大憾事,后来跟着网上很多教程在那里捣鼓了半天,真的是半天时间,压根没用,今天无意间看到一篇博客,ht...
  • CodingFire
  • CodingFire
  • 2016-09-08 13:55:30
  • 7946

Cocoapods多模块开发

阅读此文章之前你需要对cocoapods有基本的了解,这里给大家附上几篇文章: IOS依赖管理 - CocoaPods(PS:就在前几天安眠重装了系统,重新安装cocoapods发现跟以前有点点...
  • xiaobo0134
  • xiaobo0134
  • 2016-04-21 11:42:27
  • 1373

iOS 编译出现错误问题之duplicate symbol _OBJC_CLASS_$_ XXX in

问题:编译出错duplicate symbol _OBJC_CLASS_$_ XXX in 原因:导入头文件的时候误导入.m文件 解决办法:通过搜索.m文件查出 在哪个类中导入了 ...
  • frankkay
  • frankkay
  • 2017-01-18 19:53:12
  • 1729

深入理解 CocoaPods

转自:http://objccn.io/issue-6-4/ CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具。利用 CocoaPods,可以定义自己的依赖...
  • jinglijun
  • jinglijun
  • 2015-02-12 18:37:17
  • 1096

iOS "duplicate symbol"解决第三方库之间的冲突

一、问题叙述duplicate symbol(重复,相同的文件名)是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在。但是经过这种错误提示,会潜意识的反射出是文件重复了. 通常出现的情况...
  • Mr_zhangrmwork
  • Mr_zhangrmwork
  • 2017-07-14 16:53:38
  • 619

iOS错误:duplicate symbol _OBJC_METACLASS_$_ClassName

当编译程序中,出现如标题所示的错误时,表示你链接了同一个文件两次。 解决方法之一就是查看你在#import的时候是否是引入.h文件而不是.m文件,这样子可以解决。...
  • yuxikuo_1
  • yuxikuo_1
  • 2015-01-16 15:43:13
  • 3078
收藏助手
不良信息举报
您举报文章:cocoapods导致的符号重复问题分析和解决
举报原因:
原因补充:

(最多只允许输入30个字)