MonoTouch - 2个绑定项目之间的冲突

时间:2012-06-21 13:12:58

标签: c# objective-c binding xamarin.ios

我想在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编译器标志?

1 个答案:

答案 0 :(得分:1)

好的,找到了解决方法。

Millenial Media SDK有一个名为MMSDK_Split_Libraries的文件夹,在里面偷看我发现了一个libMMSDK_4.5.5_withoutJSON.a文件,其中包含用于XCode的SBJsonParser实施文件。使用这个不同的库,至少我的应用程序现在编译。我还没有集成MM SDK,所以我必须看看它是否正常工作。

很想知道是否有其他方法可以解决它。