2016-07-20 1 views
0

私の問題を紹介するために、私は "armeabi-v7a"と "x86" ABIのためだけにコンパイルされたNDKを使用するアプリケーションを持っています。コンパイルによって私に与えられます:"armeabi-v7a"ライブラリの代わりに "armeabi-v7a"エミュレータに "x86"ライブラリがインストールされているのはなぜですか?

Android NDK: WARNING: APP_PLATFORM android-17 is larger than android:minSdkVersion 10 in /home/**********/AndroidManifest.xml 
[armeabi-v7a] Gdbserver  : [arm-linux-androideabi-4.9] libs/armeabi-v7a/gdbserver 
[armeabi-v7a] Gdbsetup  : libs/armeabi-v7a/gdb.setup 
[x86] Gdbserver  : [x86-4.9] libs/x86/gdbserver 
[x86] Gdbsetup  : libs/x86/gdb.setup 
[armeabi-v7a] Install  : libNativeFFMPEG.so => libs/armeabi-v7a/libNativeFFMPEG.so 
[armeabi-v7a] Install  : libavcodec-56.so => libs/armeabi-v7a/libavcodec-56.so 
[armeabi-v7a] Install  : libavutil-54.so => libs/armeabi-v7a/libavutil-54.so 
[armeabi-v7a] Install  : libswscale-3.so => libs/armeabi-v7a/libswscale-3.so 
[x86] Install  : libNativeFFMPEG.so => libs/x86/libNativeFFMPEG.so 
[x86] Install  : libavcodec-57.so => libs/x86/libavcodec-57.so 
[x86] Install  : libavutil-55.so => libs/x86/libavutil-55.so 
[x86] Install  : libswscale-4.so => libs/x86/libswscale-4.so 

私の問題はこの警告で示される可能性がありますか? (これは、2つのターゲットのABIの同じffmpegのライブラリのバージョンではありませんが、私はそれは問題ではないと思います)次に

を、私はCPU/ABI =(ARM)armeabi-v7aと私とのエミュレータを作成しますlibはアプリケーション起動時に読み込まれません(しかし、 "x86"ベースのデバイスでは、 "x86" libが読み込まれて動作します)。シェルでエミュレータを調べると、次のようになります。

lrwxrwxrwx install 2016-07-20 10:06 lib -> /data/app/com.**********/lib/x86 

"x86" libのみがインストールされています...説明はどうですか?

(私はサムスンギャラクシーS3でテストと同じ問題を抱えている...、CPUは のARMのCortex-A9すべきであり、このCPUはのARMv7アーキテクチャを実装しています。しかし、私のライブラリはどちらか見つけるされていません)私はANDROID.MK内のエラーを修正SOMEマニピュレータAFTER

& & & & & & & & & & & & & & & & & & & &

私はSystem.loadLibraryを()を呼び出すときに発生した例外によって興味があるなら& & & & & &、これは以下の通りです:

07-20 12:31:23.360: D/dalvikvm(3671): Trying to load lib /data/app-lib/com.**********/libNativeFFMPEG.so 0x40cdc118 
07-20 12:31:23.370: W/System.err(3671): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libswscale-3.so" needed by "libNativeFFMPEG.so"; caused by load_library(linker.cpp:745): library "libswscale-3.so" not found 
07-20 12:31:23.370: W/System.err(3671):  at java.lang.Runtime.loadLibrary(Runtime.java:371) 
... 

しかしとき私は/data/app-lib/com.**********を見て、私は"armeabi-v7a" libs !!

[email protected]:/data/app-lib/com.********** # ls 
gdbserver 
libNativeFFMPEG.so 
libavcodec-56.so 
libavutil-54.so 
libswscale-3.so 

しかし、それでも例外です! swscaleをロードしようとすると、System.loadLibrary( "swscale-3");私は次の例外持っている:

07-20 12:56:36.351: E/dalvikvm(4174): dlopen("/data/app-lib/com.**********/libswscale-3.so") failed: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libavutil-54.so" needed by "libswscale-3.so"; caused by load_library(linker.cpp:745): library "libavutil-54.so" not found 
07-20 12:56:36.361: W/System.err(4174): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libavutil-54.so" needed by "libswscale-3.so"; caused by load_library(linker.cpp:745): library "libavutil-54.so" not found 
07-20 12:56:36.361: W/System.err(4174): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libavutil-54.so" needed by "libswscale-3.so"; caused by load_library(linker.cpp:745): library "libavutil-54.so" not found 

をそして私はavutil-54をロードすることが同じことをしようとしたとき、私は "NativeFFMPEG" の同じ例外を持っている(ただし、libavutil-54.so付き)

+0

最終apkファイルの内容は何ですか? ** x86 **と** armeabi-v7a **の両方のディレクトリに、必要なライブラリがありますか?そうでない場合 - JavaモジュールのABIフィルタを見てください。 – user1056837

+0

はい私は生成された.apkの中に@ user1056837のライブラリを持っています – N0un

+0

アプリケーションの開始時に 'System.loadLibrary()'というjava関数を使用し、その例外をキャッチすることを提案できます。例外メッセージには、システムがあなたのライブラリを見つけようとする情報があります。それは役に立つかもしれない。 – user1056837

答えて

1

最後に、@ user1056837の助けを借りて私の問題を解決しました。私が検索する必要が

奇妙なことは、ということです。

は(?少なくとも)ABIの「x86」は、あなたが他のライブラリに依存libmylib.soを使用する場合、あなただけのlibmylibをロードする必要があります。そう:

System.loadLibrary("mylib"); 

しかし、(少なくとも?)ABI "armeabi-v7a" のために、手動であなたのlibに、あなたのlibの依存関係、およびあなたのlibの依存度の依存関係をロードする必要が...

System.loadLibrary("dep1"); 
System.loadLibrary("dep2"); 
System.loadLibrary("mylib"); 

今私は明確な説明はしていませんが、私はそれを見つけるでしょう。私はそれが誰かを助けることができることを望む

EDIT:問題はターゲットアーチではなく、ネイティブコード/ライブラリのコンパイルに関するものです。

関連する問題