2011-10-03 15 views
6

私はAndroid用のvp8コーデックを構築しようとしています。私はconfigure.shスクリプトとmakefileをarmv6のために実行しました。これはlibvpx.soをうまく作成したsourcery g ++で行いました。その後、私はJNIラッパーを作成し、それをndk-buildで正常にコンパイルしました。ジンジャーブレッドスマートフォンでこれを実行すると、UnsatisfiedLinkError "libpthread.so.0が見つかりません"というメッセージが表示されます。どうすればこのエラーを取り除くことができますか?build vp8 on android

答えて

0

これは、共有ライブラリのSONAMEに問題があることがあります。この記事をご覧ください。

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

あなたが実際にそれらを必要としない場合は、pthreadsを無効にすることができます。

Iv'eは、過去に.soというファイルに問題があったとは.a静的ライブラリの代わりに、.soは共有ライブラリ読みやすさのためにいくつかの調整とhttp://git.chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Androidから

9

を使用することにより、これらの問題の全てを回避してきました。

  1. {project}/jniフォルダを作成します。

  2. JNIバインディングを取得します。

    gitのクローンhttps://chromium.googlesource.com/webm/bindings

  3. はlibvpxを取得します。アンドロイド

    ./libvpx/configure --target =のARMv7-GCCアンドロイド--disable-例--sdkパス用

    gitのクローンhttps://chromium.googlesource.com/webm/libvpx

  4. 構成しlibvpx = {NDKへのパス}

    --sdk-pathは絶対的である必要があります。

  5. libwebmを取得します。

    CDバインディング/ JNI

    gitのクローンhttps://chromium.googlesource.com/webm/libwebm

  6. 取得libogg。

    ダウンロードoggのコードhttp://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz

    エキスからバインディングへ/ JNI。

  7. config_types.hを生成するには、configureを実行する必要があります。

    CDのlibogg-1.3.0 & &は./configure & & CD ..バインディング/ JNIへhttp://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz

    エキスから

  8. 取得libvorbis

    ダウンロードVorbisのコード。

  9. 取得libyuv

    のsvnチェックアウトhttp://libyuv.googlecode.com/svn/trunk/ libyuv-読み取り専用

  10. 以下のデータを{}プロジェクト/jni/Application.mkを作成します。

    APP_ABI := armeabi-v7a 
    APP_OPTIM := release 
    APP_STL := gnustl_static 
    APP_CPPFLAGS := -frtti 
    
  11. データを持つ{project} /jni/Android.mkを作成するw:

    WORKING_DIR := $(call my-dir) 
    BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI 
    include $(BINDINGS_DIR)/Android.mk 
    
  12. JNIコードを作成します。

    {NDKへのパス}/

  13. コピーJavaコードをNDKビルド。

    のcp -Rバインディング/ JNI/COM /グーグル../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名前空間にあります。

+0

幻想的な回答!しかし、私が次のことをしているとき、私は設定中にいつもエラーが出ます。コンパイラをインスタンス化することはできません。ここにログがあります: コンパイラを起動できません:/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 /ユーザー/ yosef /デスクトップ/ adt/ndk/sources /アンドロイド/ cpufeatures -mtune = cortex-a8 -O3 -fPIC - W ..理由は分かっていますか? – Nativ

+0

reposは他の場所に移動されました。新しいルート(https://chromium.googlesource.com/)から取得するには、repoリンクを更新してください。 – Shrish