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

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重名了。

问题解决。

时间: 2024-10-25 13:19:51

cocoapods导致的符号重复问题分析和解决的相关文章

连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法

本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持续较长时间,有时间持续时间较短,没有什么规律.  之后分析相关存储过程和代码写法,发现是存储过程中开启了事务,而应用程序在调用存储过程发生异常之后没有进行特别的处理(提交或者回滚),  那么在执行方法发生异常之后,连接关闭了,但是数据库中遗留有活动事务(dbcc opentran对应的Session

无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biological replicates

无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biological replicates BMC Bioinformatics 的一篇文章中提出了一种新的差异基因分析方法. 这篇文章提出了CORNAS(COverage-dependent RNA-Seq) 方法,利用贝叶斯方法来推断真实基因表达数的  后验分布. 其创新型之一该方法包括了由RNA样品浓度决定的

【转】Windows10下80端口被PID为4的System占用导致Apache无法启动的分析与解决方案

昨天刚更新了Windows10,总体上来说效果还是蛮不错的,然而今天在开启Apache服务器的时候却发现,Apache莫名其妙的打不开了,起初以为是权限的问题,于是使用管理员身份的控制台去调用命令net start Apache2.4,结果依然是无法打开.手动启动服务报错“Windows不能再本地计算机启动Apache,有关更多信息,查阅系统时间日志.如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1.”如下图所示: Windows不能再本地计算机启动Apache,有关

正则表达式 小括号导致匹配项重复

正则表达式 小括号导致匹配项重复,暂时没找到原因, var reg4=/([0-9])/; var num="$999"; document.write(num.match(reg4) + "<br />"); //9,9 两次 var reg5=/[0-9]/; var num = "$999"; document.write(num.match(reg5) + "<br />"); //9 一次 后

频繁分配释放内存导致的性能问题的分析

频繁分配释放内存导致的性能问题的分析 现象 1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000. 初步分析 majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误. 这两个数值表示一个进程自启动以来所发生的缺页中断的次数

TCP粘包问题分析和解决(全)

TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小.数据量小的数据,合并成一个大的数据块,然后进行封包.这样,接收端,就难于分辨出来了,必须提供科学的拆包机制. 对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,

TCP通信粘包问题分析和解决

TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小.数据量小的数据,合并成一个大的数据块,然后进行封包.这样,接收端,就难于分辨出来了,必须提供科学的拆包机制. 对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,

YARN环境中应用程序JAR包冲突问题的分析及解决

Hadoop框架自身集成了很多第三方的JAR包库.Hadoop框架自身启动或者在运行用户的MapReduce等应用程序时,会优先查找Hadoop预置的JAR包.这样的话,当用户的应用程序使用的第三方库已经存在于Hadoop框架的预置目录,但是两者的版本不同时,Hadoop会优先为应用程序加载Hadoop自身预置的JAR包,这种情况的结果是往往会导致应用程序无法正常运行. 下面从我们在实践中遇到的一个实际问题出发,剖析Hadoop on YARN 环境下,MapReduce程序运行时JAR包查找的

c/c++服务器程序内存泄露问题分析及解决

由 www.169it.com 搜集整理 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题:Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考