Почему мое приложение Android ищет /data/app/package_name-1/lib/arm/libLibrary.so вместо использования папки armeabi

Я получаю это в logcat, когда пытаюсь загрузить библиотеку, скомпилированную только для armeabi (при условии, что это запасной вариант для всех arm* abis).

    08-14 09:43:51.516    7486-7486/package_name E/art﹕ dlopen("/data/app/package_name-1/lib/arm/libLibrary.so", RTLD_LAZY) failed: dlopen failed: unknown reloc type 160 @ 0xa3725ab4 (82108)

Из-за практических ограничений я не могу проверить это на рутованном устройстве, поэтому все, что я знаю, это то, что /data/data/package_name папка имеет символическую ссылку lib -> /data/app/package_name-1/lib/arm

Я знаю, что это не проблема конкретного устройства, так как я ранее использовал собственные библиотеки на одном устройстве (с другим приложением, но с той же архитектурой ранее).

Может ли кто-нибудь помочь мне здесь? Действительно запутался в том, что именно происходит.

Я использую сборку Gradle (Android Studio), а libLibrary.so присутствует внутри lib/armeabi папка внутри apk по разархивированию.

1 ответ

Вопрос был только частично правильным. Истинная проблема была с типом перемещения (о котором я понятия не имел первоначально).

Ошибки перемещения обычно возникают, когда загрузчик и объектный файл не понимают один и тот же формат.

В этом случае файл.so был создан с c++_static вместо gnustl_static, Android/NDK обеспечивает большинство c++11 функциональность, но некоторые из них не полностью работоспособны / функциональны, как std::to_string что заставило меня попробовать c++_static,

Надеюсь, это поможет кому-то еще, у кого еще остались волосы на голове.

Другие вопросы по тегам