1

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

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

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

最后一部分指出,当使用 XCode 4.5 或更高版本时,编译器选项“C++ Language Dialect”和“C++ Standard Library”必须设置为“Compiler Default”。

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

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

4

1 回答 1

0

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

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

于 2013-06-28T05:40:59.403 回答