单触式绑定与C和C ++调用

时间:2013-06-24 11:33:11

标签: xamarin.ios

我正在尝试绑定调用c ++代码和c代码的第三方库。我想知道是否有任何不同我需要添加额外的monotouch参数,以使其正常工作。

在我们收到的库(对于本机iOS)的实现指令中,它声明该库包含C和C ++文件,并让XCode编译器识别所有源文件,包含库的控制器的文件必须具有文件扩展名.mm

它还说要链接静态库中的所有Objective-C类(从我收集的内容,在monotouch中这意味着使用-all_load标志),然后将构建设置中的Other Linker Flags设置为-ObjC

最后一部分指出,当使用XCode 4.5或更高版本时,编译器选项“C ++语言方言”和“C ++标准库”必须设置为“编译器默认值”。

我已经创建了绑定就好了,我可以访问这些方法。但是一些回调并没有返回所有数据,甚至更奇怪的是,委托对象上的一些回调会多次触发。我假设这是因为库中的C和C ++代码,并且我没有将所有正确的标志添加到绑定项目中的linkwith.cs文件以及iOS构建选项中的其他mtouch参数中。

我需要在mtouch参数或linkwith.cs文件中添加任何特殊参数才能使这些绑定正常工作吗?

1 个答案:

答案 0 :(得分:0)

我明白了。为了使您的库能够执行C ++代码,您需要将IsCxx=True标志添加到linkwith.cs文件中。然后在您包含绑定库的主项目中,您必须转到其他mtouch参数并添加-cxx

至于编译器默认值,使用以下标志,我能够使它工作: -gcc_flags "-lstdc++"