2011-10-03 13 views
6

Sto provando a creare il codec vp8 per Android. Ho eseguito lo script configure.sh e il makefile per armv6 con sourcery g ++ che ha prodotto con successo libvpx.so. Successivamente ho scritto un wrapper JNI e l'ho compilato con ndk-build con successo. Quando lo eseguo su uno smartphone Gingerbread ho ricevuto un UnsatisfiedLinkError "libpthread.so.0 non trovato". Come posso sbarazzarmi di questo errore?build vp8 su android

risposta

0

Questo a volte può essere un problema con SONAME in una libreria condivisa, dare un'occhiata a questo articolo.

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

Si potrebbe disabilitare pthreads se non si ha realmente bisogno di loro.

Iv'e ha avuto problemi con i file .so in passato e hanno evitato tutti questi problemi utilizzando .a librerie statiche invece di .so librerie condivise

9

Da http://git.chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Android con alcuni aggiustamenti per migliorare la leggibilità.

  1. Creare la cartella {project}/jni.

  2. Ottieni binding JNI.

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

  3. Get libvpx.

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

  4. Configurare libvpx per android

    ./libvpx/configure --target = ARMv7-android-gcc --disable-esempi --sdk-path = {percorso NDK}

    --sdk-path DEVE essere assoluto.

  5. Ottieni libwebm.

    attacchi cd/JNI

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

  6. Get libogg.

    Scarica codice OGG da http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz

    estratto di attacchi/JNI.

  7. Abbiamo bisogno di eseguire configure per generare config_types.h.

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

  8. Get libvorbis

    codice Scarica vorbis da http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz

    estratto di attacchi/JNI.

  9. Get libyuv

    svn checkout http://libyuv.googlecode.com/svn/trunk/ libyuv-sola lettura

  10. Creare {progetto} /jni/Application.mk con i dati di seguito:

    APP_ABI := armeabi-v7a 
    APP_OPTIM := release 
    APP_STL := gnustl_static 
    APP_CPPFLAGS := -frtti 
    
  11. Creare {project} /jni/Android.mk con i dati belo w:

    WORKING_DIR := $(call my-dir) 
    BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI 
    include $(BINDINGS_DIR)/Android.mk 
    
  12. Creare il codice JNI.

    {percorso NDK}/NDK-costruire

  13. Copiare il codice Java.

    cp -r attacchi/JNI/com/google ../src/com/

  14. aggiungere il codice per testare le associazioni.

    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. Eseguire l'app. Dovresti vedere l'output della versione di libwebm.

  16. Tweak secondo necessità. I wrapper VP8 si trovano nello spazio dei nomi com.google.libvpx.

+0

risposta fantastica! ma - quando eseguo le operazioni seguenti, ricevo sempre errori durante la configurazione. Non è possibile creare un'istanza del compilatore. Ecco il registro: Impossibile richiamare il compilatore: /Users/yosef/Desktop/adt/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot =/Users/yosef/Desktop/adt/ndk/sources/android/libportable/arch-arm -I/Users/yosef/Desktop/adt/ndk/sources/android/cpufeatures -mtune = cortex-a8 -O3 -fPIC - W .. Sai quale potrebbe essere la ragione? – Nativ

+0

i repository sono stati spostati altrove. Si prega di aggiornare i collegamenti repo per ottenere dalla nuova radice - https://chromium.googlesource.com/ – Shrish