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

2014-05-23 11:41:37 +08:00
 banxi1988
怀疑是使用的SDK和本身项目使用同一个库造成冲突.
错误消息:
duplicate symbol _DegreesToRadians in:
/Volumes/Store/NonPodVendor/ShareSDK/Extend/QQConnectSDK/TencentOpenAPI.framework/TencentOpenAPI(SetHeadImageViewController.o)
Library/Developer/Xcode/DerivedData/Products/Debug-iphonesimulator/libPods.a(JCNotificationBannerPresenterIOSStyle.o)
duplicate symbol _RadiansToDegrees in:
/Volumes/Store/NonPodVendor/ShareSDK/Extend/QQConnectSDK/TencentOpenAPI.framework/TencentOpenAPI(SetHeadImageViewController.o)
Library/Developer/Xcode/DerivedDataBuild/Products/Debug-iphonesimulator/libPods.a(JCNotificationBannerPresenterIOSStyle.o)
ld: 2 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

从上面的错误信息上看是不是ShareSDK中带的;Tencent的Framework中
与项目引用了同一个开源项目JSNotificationBannerPresenter 造成了冲突,
如果是的话,要怎么改才比较好呢?如果不是?是什么问题?
10117 次点击
所在节点    iDev
1 条回复
banxi1988
2014-05-23 11:59:41 +08:00
自己解决了,就贴下解决办法方便后来人吧.
查看了JCNotificationBannerPresenterIOSStyle源代码,
发现有冲突的是以下可能是由以下两个函数名,可能编译后编译器将名字加了_前缀.

CGFloat DegreesToRadians(CGFloat degrees) { return degrees * M_PI / 180.0; };
CGFloat RadiansToDegrees(CGFloat radians) { return radians * 180.0 / M_PI; };
可能是作为两个简单的函数,跟其他的函数冲突了吧.
我的做法时,不在使用cocoapods管理此库,而是下载下来做为项目的一部分,
然后修改源代码:
将上面的函数名更改一下:
CGFloat MyDegreesToRadians(CGFloat degrees) { return degrees * M_PI / 180.0; };
CGFloat MyRadiansToDegrees(CGFloat radians) { return radians * 180.0 / M_PI; };

然后编译就通过了!~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/113909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX