Построить vp8 на андроид
Я пытаюсь собрать кодек vp8 для Android. Я запустил скрипт configure.sh и make-файл для armv6 с исходным кодом g++, который успешно создал libvpx.so. После этого я написал оболочку JNI и успешно скомпилировал ее с помощью ndk-build. Когда я запускаю это на смартфоне Gingerbread, я получаю UnsatisfiedLinkError "libpthread.so.0 not found". Как я могу избавиться от этой ошибки?
2 ответа
С http://git.chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Android с некоторыми корректировками для удобочитаемости.
Создать папку {project}/jni.
Получить привязки JNI.
Получите libvpx.
Настройте libvpx для Android
./libvpx/configure --target = armv7-android-gcc --disable-examples --sdk-path = {путь к NDK}
--sdk-path
ДОЛЖЕН быть абсолютным.Получите libwebm.
CD-привязки / JNI
Получите libogg.
Загрузите ogg-код с http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
Извлечение в привязки /JNI.
Нам нужно запустить configure для генерации config_types.h.
cd libogg-1.3.0 &&./configure && cd..
Получить libvorbis
Загрузите код ворбиса с http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
Извлечение в привязки /JNI.
Получить libyuv
svn checkout http://libyuv.googlecode.com/svn/trunk/ libyuv-только для чтения
Создайте {project}/jni/Application.mk со следующими данными:
APP_ABI := armeabi-v7a APP_OPTIM := release APP_STL := gnustl_static APP_CPPFLAGS := -frtti
Создайте {project}/jni/Android.mk со следующими данными:
WORKING_DIR := $(call my-dir) BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI include $(BINDINGS_DIR)/Android.mk
Создайте код JNI.
{путь к NDK}/ndk-build
Скопируйте код Java.
cp -R bindings / JNI / com / google../src/com/
Добавьте код для проверки привязок.
int[] major = new int[2]; int[] minor = new int[2]; int[] build = new int[2]; int[] revision = new int[2]; MkvMuxer.getVersion(major, minor, build, revision); String outStr = "libwebm:" + Integer.toString(major[0]) + "." + Integer.toString(minor[0]) + "." + Integer.toString(build[0]) + "." + Integer.toString(revision[0]); System.out.println(outStr);
Запустите приложение. Вы должны увидеть вывод версии libwebm.
Твик по мере необходимости. Оболочки VP8 находятся в пространстве имен com.google.libvpx.
Иногда это может быть проблемой с SONAME в общей библиотеке, посмотрите эту статью.
http://groups.google.com/group/android-ndk/browse_thread/thread/fd484da512650359
Вы можете отключить pthreads, если они вам действительно не нужны.
В прошлом у меня были проблемы с файлами.so, и я избежал всех этих проблем, используя статические библиотеки.a вместо общих библиотек.so