java.lang.Ошибка UnsatisfiedLinkError: ошибка dlopen: не удается найти символ «__aeabi_memcpy8», на который ссылается mylib.so

#android #android-ndk

#Android #android-ndk

Вопрос:

Когда мое приложение запускается на устройствах Android 6.0 или ниже (Nexus 5, Galaxy 3 …), оно завершает работу в System.LoadLibrary («mylib»);

Он отлично работает с устройствами Android 7.0 (Nexus 5x, Nexus 9). Я использую последнюю версию Android Studio (2.2) и NDK.

Сообщение журнала cat

java.lang.Ошибка UnsatisfiedLinkError: ошибка dlopen: не удается найти символ «__aeabi_memcpy8», на который ссылается mylib.so .

Ниже приведена часть build.gradle.

 compileSdkVersion 24
buildToolsVersion '24.0.2'
defaultConfig {
    applicationId "myApp"
    minSdkVersion 10
    targetSdkVersion 24 // Whatever this is, it crashes(22, 19...).
    ndk {
        moduleName "mylib"
    }
}
  

Ниже Application.mk

 APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-10 // Whatever this is, it crashes.
  

В чем проблема?

Даже если я закомментирую все memcpy в файлах .c, он выдает одно и то же сообщение об ошибке. Перед запуском я очищаю и перестраиваю проект.

Комментарии:

1. Учитывая, что он __aeabi_memcpy8 работает на N (24), но не на M (23) или ниже, это, скорее всего, проблема его компиляции с android-24. При использовании ndk-сборки через gradle я ожидал APP_PLATFORM бы победы, но, похоже, ни это, ни targetSdkVersion используется. Если вы измените compileSdkVersion значение на 23, это сработает? Предполагая, что это исправляет, это ошибка. Если да, не могли бы вы его подать? tools.android.com/filing-bugs

2. Нет. он по-прежнему вылетает, даже если я меняю compileSdkVersion на 23.

3. Хм. Показывает ли gradle подробный вывод для компиляции где-нибудь? Аргументы --sysroot или -L будут указывать на $NDK/platforms/android-$VERSION .

4. Я не знаю, как его использовать. Как ни странно, он работает с виртуальными устройствами, но не с реальными устройствами.

5. По моему опыту, эмуляторы не отражают реальность, когда дело доходит до машинного кода.

Ответ №1:

Убедитесь, что под вашим ndk> платформами указана правильная форма в вашем Application.mk APP_PLATFORM=Android-x.