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

  1. Создать папку {project}/jni.

  2. Получить привязки JNI.

    git clone https://chromium.googlesource.com/webm/bindings

  3. Получите libvpx.

    git clone https://chromium.googlesource.com/webm/libvpx

  4. Настройте libvpx для Android

    ./libvpx/configure --target = armv7-android-gcc --disable-examples --sdk-path = {путь к NDK}

    --sdk-path ДОЛЖЕН быть абсолютным.

  5. Получите libwebm.

    CD-привязки / JNI

    git clone https://chromium.googlesource.com/webm/libwebm

  6. Получите libogg.

    Загрузите ogg-код с http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz

    Извлечение в привязки /JNI.

  7. Нам нужно запустить configure для генерации config_types.h.

    cd libogg-1.3.0 &&./configure && cd..

  8. Получить libvorbis

    Загрузите код ворбиса с http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz

    Извлечение в привязки /JNI.

  9. Получить libyuv

    svn checkout http://libyuv.googlecode.com/svn/trunk/ libyuv-только для чтения

  10. Создайте {project}/jni/Application.mk со следующими данными:

    APP_ABI := armeabi-v7a
    APP_OPTIM := release
    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti
    
  11. Создайте {project}/jni/Android.mk со следующими данными:

    WORKING_DIR := $(call my-dir)
    BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI
    include $(BINDINGS_DIR)/Android.mk
    
  12. Создайте код JNI.

    {путь к NDK}/ndk-build

  13. Скопируйте код Java.

    cp -R bindings / JNI / com / google../src/com/

  14. Добавьте код для проверки привязок.

    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);
    
  15. Запустите приложение. Вы должны увидеть вывод версии libwebm.

  16. Твик по мере необходимости. Оболочки VP8 находятся в пространстве имен com.google.libvpx.

Иногда это может быть проблемой с SONAME в общей библиотеке, посмотрите эту статью.

http://groups.google.com/group/android-ndk/browse_thread/thread/fd484da512650359

Вы можете отключить pthreads, если они вам действительно не нужны.

В прошлом у меня были проблемы с файлами.so, и я избежал всех этих проблем, используя статические библиотеки.a вместо общих библиотек.so

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