Почему мое приложение для 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 при распаковке.


person Rads    schedule 14.08.2015    source источник
comment
я предполагаю, что android-studio работает с папкой jniLib со всеми файлами .so в ней.   -  person KOTIOS    schedule 14.08.2015
comment
@N5. - При извлечении встроенного apk я могу найти файл .so в папке lib/armeabi, может ли это быть проблемой с папкой jniLib?   -  person Rads    schedule 14.08.2015
comment
я пробовал с файлами .so в папке libs, но студия Android не подобрала его ... возможно, добавьте его в файл ../main/jinLib/armeabi/.so   -  person KOTIOS    schedule 14.08.2015


Ответы (1)


Вопрос был корректен лишь частично. Настоящая проблема была с типом релокации (о котором я изначально понятия не имел).

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

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

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

person Rads    schedule 15.08.2015