请教库冲突的导致的 duplicate symbol in链接错误

请教库冲突的导致的 duplicate symbol 链接错误_百度知道
请教库冲突的导致的 duplicate symbol 链接错误
提问者采纳
查看了JCNotificationBannerPresenterIOSStyle源代码, 发现有冲突的是以下可能是由以下两个函数名,可能编译后编译器将名字加了_前缀. CGF旦讥测客爻九诧循超末loat DegreesToRadians(CGFloat degrees) { return degrees * M_PI / 180.0; }; CGFloat RadiansToDegrees
来自团队:
其他类似问题
为您推荐:
百分数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁后使用快捷导航没有帐号?
暂时没有人问过相似的问题,你可以做第一个提问题的人
查看: 974|回复: 2
话说这个冲突要怎么消除?
duplicate symbol _kReachabilityChangedNotification in:
& & /Users/suski/Library/Developer/Xcode/DerivedData/CarWash-favhevndlrwdlegyoruitwkvmhej/Build/Products/Debug-iphoneos/libPods-Reachability.a(Reachability.o)
& & /Users/suski/Desktop/CarWashAPP/CarWash/CarWash/BaiduNaviSDK/libbaiduNaviSDK.a(BNReachability.o)
都是静态库的冲突,改不了代码。。。
libPods-Reachability.a是开源的,你可以把这个库里面的kReachabilityChangedNotification换个名字。如果看不到libPods-Reachability.a的代码,可以把libPods-Reachability.a删掉,然后从github上下载Reachability源码,把源码加到工程中,然后修改kReachabilityChangedNotification这个变量的名字。后续版本我们会加强sdk和开源类库的兼容性。
libPods-Reachability.a是开源的,你可以把这个库里面的kReachabilityChangedNotification换个名字。如果看 ...
NSString *const kReachabilityChangedNotificationTEST = @&kReachabilityChangedNotificationTEST&;
改成这样 还是一样的报错&&我遇见的情况和楼主一样& &拜托层主帮忙下
Powered by下次自动登录
现在的位置:
& 综合 & 正文
iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法
iOS集成的第三方库过多时,很容易出现某几个库同时用到了一样的函数库,也就是在你的程序link时会提示duplicate symbol,而重复的符号又不是由你自己程序的造成的,也就说没法通过直接修改代码把重复的符号去掉!这样呢,要不就要求第三方库提供方该代码,要不就自己修改第三方库的库文件。第一种方法多少有点无理要求,所以还是直接用第二种方法自己解决了吧,也就是直接修改.a文件或framework里的库二进制文件:
这里我只列出针对.a文件的处理方法,framework操作过程类似。
开console,找到要解剖的.a文件,执行下列命令查看库包含的cpu架构代码:
lipo -info libx.a
Architectures in the fat file: libx.a are: i386 armv6 armv7
然后用 lipo -extract_family armv6 -output libx-inter.a libx.a
分离出arm版本的.a,这里有个小问题,按我的理解此命令应该对包含3种cpu代码的.a里的armv6部分进行操作,而实际分离出来的.a却是同时包含armv6和armv7的部分,也就是依然是”fat” lib,这样是不能抽出.o的,因此还需要进行以下操作:
lipo libx-inter.a -thin armv6 -output libx-armv6.a lipo libx-inter.a -thin armv7 -output libx-armv7.a
这样就能分离出2份不同版本arm的.a了,然后进行解.o操作:
ar -x libx-armv6.a
这部操作最好放到单独的文件夹里进行,会将link出.a的所有.o还原出来,然后有两种选择:一是把所有库对应cpu架构的部分都还原到这个位置,然后将重复的部分合并为一份,接着用后面的命令将所有.o再合并为一份公共lib。还有一种选择就是保留重复符号中的一份lib完好如初,将其余lib单独解开,剔出重复符号存在的.o,然后将该lib重新link回.a,以去除重复符号。
不管用哪种方法解决,最后的link回命令如下:
libtool -static -o ../libx-armv6.a *.o
当然,别忘了咱们的库都是有多份cpu架构指令的,所以,先要对每种cpu arch的库进行同样操作,然后还要将thin lib合并回fat lib:
lipo -create -output libx.a libx-armv6.a libx-i386.a libx-armv7.a
这样,再link回自己的app时就不会再出现duplicate symbol了。
/topic/thread-845884.html 使用多个第三方库出现duplicate symbol的解决办法
/questions/5352113/how-do-i-turn-a-fat-library-into-a-non-fat-library How do I turn a “fat” library into a “non-fat” library?
&&&&推荐文章:
【上篇】【下篇】你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
两个.a文件duplicate symbol,冲突怎么解决(){
duplicate symbol _OBJC_METACLASS_$_RFImageToDataTransformer in:
/Users/donglizhen/Desktop/trunk/AllStar/Library/EaseMobSDK/lib/libEaseMobClientSDKLite.a(RFImageToDataTransformer.o)
/Users/donglizhen/Desktop/trunk/AllStar/Library/xiaoMin/libMiPushSDK.a(RFImageToDataTransformer.o)
这个没有办法,不能同时使用的
你要实时语音聊天功能呢就用libEaseMobClientSDK.a。这个包含所有功能。
不需要实时语音聊就用libEaseMobClientSDKLite.a。不包含实时语音
要回复问题请先或
关注: 3 人
知识价值的认可,源自您的赞赏
扫描二维码,你的支付将由imGeek代收后转给对方
感谢您的赞赏
一个开放、互助、协作、创意的社区
一个开放、互助、协作、创意的社区查看: 1584|回复: 9
精华0在线时间455 小时帖子主题UID67449积分6220技术分2365 资源分30 分享激情2759 博客好友记录相册
高级工程师
巡抚, 积分 6220, 距离下一级还需 3780 积分
UID67449积分6220
在使用第三方库时,编译报错 link时会提示duplicate symbol。经查找是库中文件冲突问题。
就查阅资料使用lipo -info 命令。但由于是.framework的库不能执行此命令?.a的库是可以的。
2.各位.framework库与.a的库有什么区别呀,求赐教
精华0在线时间146 小时帖子主题UID16积分41819技术分26580 资源分1119 分享激情3539 博客好友记录相册
高级架构师
UID16积分41819
简单的分析动态库与静态库的区别
使用静态库的好处
1,模块化,分工合作
2,避免少量改动经常导致大量的重复编译连接
3,也可以重用,注意不是共享使用
动态库使用有如下好处:
1使用动态库,可以将最终可执行文件体积缩小
2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源
3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小。
&.a的是动态库,framework是静态库是?
动态库可以把.o文件解刨,重新打成库。静态库不可以吗?&
精华0在线时间455 小时帖子主题UID67449积分6220技术分2365 资源分30 分享激情2759 博客好友记录相册
高级工程师
巡抚, 积分 6220, 距离下一级还需 3780 积分
UID67449积分6220
symbian_love 发表于
简单的分析动态库与静态库的区别
使用静态库的好处
.a的是动态库,framework是静态库是?
动态库可以把.o文件解刨,重新打成库。静态库不可以吗?
精华0在线时间146 小时帖子主题UID16积分41819技术分26580 资源分1119 分享激情3539 博客好友记录相册
高级架构师
UID16积分41819
a是静态库,framework是动态库,静态库你要破解是很不容易的一件事情,里面全是二进制文件。如果你说你要去做肯定也可以做到,费时。
&我主要解决冲突问题,怎么把framework库的.o文件导出,再重新打包求赐教&
精华0在线时间455 小时帖子主题UID67449积分6220技术分2365 资源分30 分享激情2759 博客好友记录相册
高级工程师
巡抚, 积分 6220, 距离下一级还需 3780 积分
UID67449积分6220
symbian_love 发表于
a是静态库,framework是动态库,静态库你要破解是很不容易的一件事情,里面全是二进制文件。如果你说你要去 ...
我主要解决冲突问题,怎么把framework库的.o文件导出,再重新打包求赐教
精华0在线时间146 小时帖子主题UID16积分41819技术分26580 资源分1119 分享激情3539 博客好友记录相册
高级架构师
UID16积分41819
什么冲突,把错误贴出来看看
&如果我把d3des.c文件删除,就不会包这个错误。所以是那个第三方库中包含这个文件,但又不开放那个文件,我需要把那个库中的d3des.o文件剔除调就OK了。但是我用lipo这个命令却不行&
精华0在线时间455 小时帖子主题UID67449积分6220技术分2365 资源分30 分享激情2759 博客好友记录相册
高级工程师
巡抚, 积分 6220, 距离下一级还需 3780 积分
UID67449积分6220
symbian_love 发表于
什么冲突,把错误贴出来看看
14:16:06 上传
如果我把d3des.c文件删除,就不会包这个错误。所以是那个第三方库中包含这个文件,但又不开放那个文件,我需要把那个库中的d3des.o文件剔除调就OK了。但是我用lipo这个命令却不行
精华0在线时间146 小时帖子主题UID16积分41819技术分26580 资源分1119 分享激情3539 博客好友记录相册
高级架构师
UID16积分41819
你这个问题应该是你重复添加了,你把你build setting里面的就是引入库的那里把debug-iphoneos这个删除了,试试看
&我在compile sources中搜索过只增加了一次d3des.c这个文件
这个怎么改呀,怎么把引入库的那个debug-iphoneos删除了?没找到位置。
我修改为release还是编译还是这个错误,只是debug变为release&
精华0在线时间455 小时帖子主题UID67449积分6220技术分2365 资源分30 分享激情2759 博客好友记录相册
高级工程师
巡抚, 积分 6220, 距离下一级还需 3780 积分
UID67449积分6220
symbian_love 发表于
你这个问题应该是你重复添加了,你把你build setting里面的就是引入库的那里把debug-iphoneos这个删除了,试 ...
我在compile sources中搜索过只增加了一次d3des.c这个文件
这个怎么改呀,怎么把引入库的那个debug-iphoneos删除了?没找到位置。
我修改为release还是编译还是这个错误,只是debug变为release
精华0在线时间146 小时帖子主题UID16积分41819技术分26580 资源分1119 分享激情3539 博客好友记录相册
高级架构师
UID16积分41819
就是在,Framework search Paths,Library search paths,这2个里面看一下
及时将最新信息发给我
通过Email及时将最新的模板和服务发给我。
及时了解我们最新动态。关注我们的微博
官方微博: &&&

我要回帖

更多关于 ios duplicate symbol 的文章

 

随机推荐