Ошибка выполнения собственного приложения, скомпилированного с помощью NDK в Android. не удается найти 'log2' (работает нормально на эмуляторе)

Я (кросс) скомпилировал бинарный файл, используя Android-NDK, без ошибок на этапе компиляции / компоновки. Приложение статически связано.

Используя эмулятор Nesux7, я выполняю:

 $ adb shell mount -o remount,rw /system
 $ adb push myApp /system/bin
 $ adb shell /system/bin/myApp

Он работает "ОК" и печатает правильный вывод.

Затем я создаю последний apk и устанавливаю на реальный телефон. Это не в состоянии выполнить. Отладка приложения:

 $ adb shell
 $ run-as com.blablabla.myapp
 $ cd /data/data/com.blablabla.myapp/files/bin
 $ ./myApp

возникает следующая ошибка:

reloc_library[1306]: 21538 cannot locate 'log2'...
CANNOT LINK EXECUTABLE

В другом посте ( NDK: статическое связывание libm) кто-то жалуется на различия между libm.a и libm.so, но в любом случае, поскольку он работает на моем эмуляторе, я думаю, что компиляция "вроде бы в порядке".

Я полностью застрял в этой точке. Любая идея?

1 ответ

Решение

Наконец я нашел источник проблемы.

Я использовал /opt/android-ndk-r9d/platform / android-19 в качестве NDK. Эта версия уже включает в себя log2 и другие математические функции в стандартной платформе libm, поэтому не было проблем во время компиляции или выполнения в устройствах / эмуляторах, использующих эту версию Android.

Более старые версии не включают такие функции, поэтому возникает ошибка во время выполнения, даже если компиляция "ОК". Используя более старую платформу /opt/android-ndk-r9d/platform / android-3), исходный код (avconv/ffmpeg) обнаружил его и заменил его собственными макросами в libavutil / libm.h. Это гарантирует, что он будет работать в любой версии Android, исправляя проблему компиляции / запуска.

Существует не так много документации о том, что входит в каждую платформу / Android-N. Лучший источник информации о "батареях", включенных в различные платформы NDK, - это:

http://mobilepearls.com/labs/native-android-api/ndk/docs/STABLE-APIS.html

что в любом случае не дает много деталей.

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