2013-06-24 31 views
1

我试图绑定第三方库,使得以C++代码和C代码调用。我想知道是否有什么不同,我需要添加额外monotouch参数,使其正常工作。MonoTouch的绑定C和C++调用

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

它还表示链接静态库中的所有Objective-C类(从我收集的内容中,单击此处表示使用-all_load标志),然后设置其他将构建设置中的链接器标志设置为-ObjC。

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

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

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

+0

一般情况下,如果您没有正确地获取正确的mtouch/linkwith参数,您的项目不会生成,或者它在运行时崩溃。你看到的行为并不完全匹配,所以我相信问题在别处(可能是绑定本身)。你能解释一下到底发生了什么(什么是ObjC API,你是如何绑定它的,你看到的是什么,你期望的是什么)? –

回答

0

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

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