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

Android NDK+两个共享库+RTTI+动态强制转换=不可能,android,android-ndk,rtti,Android,Android Ndk,Rtti,到目前为止,我已经在一个星期天做了4个小时了。我就要放弃了。 我已经尝试了我在互联网上找到的每一篇文章,但这根本不会起作用 任何带有引用或指针的dynamic_cast实例要么返回null,要么直接导致程序崩溃。这对我的整个应用程序体系结构来说绝对是100%的关键,如果我不能做到这一点,我可能只需要使用200 MB的静态libs 我正在使用-frti构建没有-fno的rtti,并且使用-Wl链接,-export-dynamic也在我所有的库上尝试了rdynamic 我还使用自己的dlopenfn

到目前为止,我已经在一个星期天做了4个小时了。我就要放弃了。 我已经尝试了我在互联网上找到的每一篇文章,但这根本不会起作用

任何带有引用或指针的dynamic_cast实例要么返回null,要么直接导致程序崩溃。这对我的整个应用程序体系结构来说绝对是100%的关键,如果我不能做到这一点,我可能只需要使用200 MB的静态libs

我正在使用-frti构建没有-fno的rtti,并且使用-Wl链接,-export-dynamic也在我所有的库上尝试了rdynamic

我还使用自己的dlopenfn、RTLD_NOW | RTLD_GLOBAL手动覆盖了Java的loadLibrary,以打开每个lib。我尝试了所有可能的标志组合


难道这根本不可能吗?让android来处理在其他平台上运行了整整十年的东西,然后把它变成一个无法解决的huuuuge问题。

这可能是。C++ abi使得在动态加载库时正确获取RTTI是很困难的。您的每种类型都必须有一个键函数,一个虚拟的、非内联的、非析构函数方法,RTTI才能跨共享库边界工作。

可以共享您的日志和相关代码吗?感谢您的回复。我可能真的有。偶然发现了一些关于链接libstdc++\u共享而不是奇怪的默认静态版本的建议。很快就会更新回来。让我完全震惊的是,安卓官方NDK文档中的另一条建议并没有解决这个问题。链接到c++\uShared绝对不能解决问题。我的代码库非常复杂,超过10万行。正在崩溃的代码段在这里``auto ee=dynamic\u pointer\u castent;HitTestResult bbHit={nullptr,float3::zero,float3::zero,0};lock\u guard lockeree->getEditDataLock;`ee保证是正确的类型,这适用于所有其他构建。我放弃,这将是一个静态库构建。我不能再花一秒钟来处理这个不存在的问题了。