Ошибка выполнения собственного приложения, скомпилированного с помощью 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
что в любом случае не дает много деталей.