Android、SWIG 和双向通信

发布于 2024-11-01 06:28:55 字数 345 浏览 4 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雨巷深深 2024-11-08 06:28:55

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 line APP_STL := gnustl_static to the Application.mk file.

回忆追雨的时光 2024-11-08 06:28:55

恐怕您需要编写自己的不使用 RTTI 的 JNI。

you'll need to write your own JNI that doesn't use RTTI, i'm afraid.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文