Android NDK + две общие библиотеки + RTTI + динамическое приведение = невозможно - PullRequest
0 голосов
/ 03 июня 2019

Я занимался этим 4 часа в воскресенье. Я собираюсь сдаться. Я пробовал буквально все посты, которые я нашел в интернете, и это просто не ... не работает!

Любой экземпляр dynamic_cast со ссылками или указателями либо возвращает ноль, либо выводит из строя мою программу. Это абсолютно на 100% критично для всей моей архитектуры приложений, и мне, возможно, придется перейти на 200 МБ статических библиотек, если я не смогу это сделать.

Я строю с -frtti (нет -fno-rtti) и связываюсь с -Wl,-export-dynamic (также пытался rdynamic) во всех моих библиотеках.

Я также вручную отверг * Java 1011, используя свой dlopen(fn, RTLD_NOW | RTLD_GLOBAL), чтобы открыть каждую библиотеку (я пробовал каждую возможную комбинацию флагов.

Это просто невозможно? Оставьте это для Android, чтобы взять что-то, что хорошо работало для меня целое десятилетие на других платформах, и превратить это в огромную проблему, которая не может быть решена.

1 Ответ

0 голосов
/ 05 июня 2019

Это, вероятно, https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md#rtti_exceptions-not-working-across-library-boundaries. ABI C ++ усложняет правильную настройку RTTI при динамической загрузке библиотек. Каждый из ваших типов должен иметь ключевую функцию (виртуальный, не встроенный, неразрушающий метод), чтобы RTTI мог работать через границы общей библиотеки.

...