我想在MonoTouch应用程序中使用两个Objective-C库:Facebook库和Millennial Media的广告库。
当我尝试编译我的MonoTouch应用程序时(即使只是模拟器),我收到错误:
ld: duplicate symbol _OBJC_CLASS_$_SBJsonParser in /var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp6024c613.tmp/libMMSDK_4.5.5.a(SBJsonParser.o) and /var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp6024c613.tmp/libFacebookSDK.a(SBJsonParser.o) for architecture i386
collect2: ld returned 1 exit status
我认为这两个库都在使用SBJsonParser
,这就是问题所在。
然后我尝试将它们放在同一个MonoTouch绑定项目中,但仍然得到完全相同的错误。
我的绑定来自the Xamarin binding projects on GitHub。以下是设置链接器标志的内容:
[assembly: LinkWith ("libMMSDK_4.5.5.a", LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, Frameworks = "CoreGraphics QuartzCore MediaPlayer CoreLocation MobileCoreServices AudioToolbox AVFoundation SystemConfiguration UIKit", ForceLoad = true)]
...
[assembly: LinkWith ("libFacebookSDK.a", LinkTarget.Simulator | LinkTarget.ArmV6 | LinkTarget.ArmV7, ForceLoad = true, Frameworks = "CoreGraphics")]
我有什么办法可以解决这个问题吗?也许是额外的MonoTouch编译器标志?
答案 0 :(得分:1)
好的,找到了解决方法。
Millenial Media SDK有一个名为MMSDK_Split_Libraries
的文件夹,在里面偷看我发现了一个libMMSDK_4.5.5_withoutJSON.a
文件,其中包含用于XCode的SBJsonParser
实施文件。使用这个不同的库,至少我的应用程序现在编译。我还没有集成MM SDK,所以我必须看看它是否正常工作。
很想知道是否有其他方法可以解决它。