Android、SWIG 和双向通信
我有一个 C++ api,我无法更改它:
- 公开对象(简单)
- 公开必须由调用者派生的接口(经典的触发器侦听器设计模式)。
我设法使用 SWIG 和 directer 功能将此 API 包装到 python,该功能允许跨语言派生。 然而,当我尝试使用 ndk 编译它,并在 Android 中的 Dalvik VM 中公开它时,我发现 SWIG 中的控制器是通过 RTTI 支持的,而 Android 不支持 RTTI。
关于如何解决这个限制有什么想法吗?基本上,我有一种使用 JNI 和 SWIG 在 Java 中公开本机对象的简单方法,但我需要能够从本机代码触发我的 Java 代码。
I have a C++ api I can't change which:
- exposes object (easy)
- exposes interfaces that have to be derived by caller (classical trigger-listener design pattern).
I managed to wrap this API to python using SWIG and the director feature, which allows cross-language derivation.
However, when I tried to compile it using ndk, to expose it in Dalvik's VM in Android, I discovered that directors in SWIG are supported through RTTI, and that Android does not support RTTI.
Any idea on how I could workaround this limitation? Basically, I have an easy way of exposing my native objects in Java using JNI and SWIG, but I need to be able to trigger my Java code from native code.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Android 确实支持 RTTI 和 NDK r5 的例外。只需添加
-fexceptions
和-frtti
编译标志,并将行APP_STL := gnustl_static
添加到Application.mk
文件。Android does support RTTI and exceptions from NDK r5. Just add
-fexceptions
and-frtti
compilation flags and also add lineAPP_STL := gnustl_static
to theApplication.mk
file.恐怕您需要编写自己的不使用 RTTI 的 JNI。
you'll need to write your own JNI that doesn't use RTTI, i'm afraid.