Xamarin iOS Native链接适用于模拟器,设备上的重复符号

时间:2016-07-04 05:27:29

标签: c++ ios gcc xamarin xamarin.ios

我试图为Xamarin链接复杂的原生项目。它的Obj-C UI项目依赖于C ++库上的Native Obc-C ++包装器(这是嵌入式项目): enter image description here

我在Xcode中有原生的源代码和测试项目,一切都很顺利。

然后我创建所有依赖项的胖库,将它们添加到xamarin绑定项目中。

enter image description here

在主项目中,我必须为模拟器和设备设置相同的gcc选项:

-vvvv -cxx --registrar:static -gcc_flags "-L${ProjectDir}/../RMSDKWrapper -dead_strip -lstdc++ -lstdc++.6.0.9 -lpthread -lsqlite3 -lxml2 -ObjC -ladept-iOS -lxml-iOS -lz -lcurl -lssl -lcrypto -ldp-iOS -lePub3-iOS -L/usr/lib -I/usr/include/libxml2"

在Simulator上一切正常但是当我试图为Device编译时,链接器因为重复的符号而无法链接库。我使用' nm'检查了所有的库。模拟器和设备的所有对象看起来都一样。 我看到只有重复的对象是嵌入式包装器中的Obj-C ++类(rmsdk_wrapper2.xcodeproj)。 nm在主机项目(TestRMSD.xcodeproj)中找到包装器lib和lib中的对象。但是对于模拟器来说它很好地解决了,对于设备来说都没有。

UPD XS版本: https://gist.github.com/ad1Dima/eb1cc390930e191a5454260da2410c91

构建日志: https://gist.github.com/ad1Dima/8ea8c4a271ef63efb310252234b32ae5

我知道如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

此错误的可能原因:

  • 包含两次相同的本机库。
  • 两个不同的本地库碰巧定义了相同的符号。
  • 未正确构建本机库,并且多次包含相同的符号。

您可以在此处找到链接错误的问题排查步骤:https://developer.xamarin.com/guides/ios/troubleshooting/mtouch-errors/#MT5212

答案 1 :(得分:0)

我必须在一个项目中移动所有本机代码才能解决此问题。所以我有一个lib,设备上没有链接错误。

但是我不明白链接器有什么问题。