Android NDK +两个共享库+ RTTI +动态强制转换=不可能

时间:2019-06-03 03:09:50

标签: android android-ndk rtti

到目前为止,我在星期天已经在这里呆了4个小时。我要放弃了 实际上,我已经尝试过在互联网上找到的每条帖子,但这只会..不..工作!

带有引用或指针的dynamic_cast的任何实例返回null或完全崩溃会使我的程序崩溃。对于我的整个应用程序体系结构,这绝对是100%至关重要的,如果我无法做到这一点,我可能只需要使用200 MB静态库即可。

我正在使用-frtti(没有-fno-rtti)进行构建,并在我所有的库中都与-Wl,-export-dynamic(也尝试过rdynamic)进行链接。

我还通过使用自己的loadLibrary()来手动打开了Java的dlopen(fn, RTLD_NOW | RTLD_GLOBAL),以打开每个库(我尝试了每种可能的标志组合。

这根本不可能吗?将其留给android来使用,在整个其他平台上对我来说已经工作了整整十年的事情都变成了无法解决的巨大问题。

1 个答案:

答案 0 :(得分:0)

这可能是https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md#rtti_exceptions-not-working-across-library-boundaries。当动态加载库时,C ++ ABI使正确获取RTTI变得很棘手。您的每种类型都必须具有关键功能(虚拟,非内联,非析构函数方法),RTTI才能跨共享库边界工作。