2016-07-20 7 views
0

내 문제를 소개하기 위해 "armeabi-v7a"및 "x86"ABI에만 컴파일 된 NDK를 사용하는 응용 프로그램이 있습니다. 그래서 컴파일은 나를 제공합니다 :왜 "x86"라이브러리가 "armeabi-v7a"라이브러리 대신 "armeabi-v7a"에뮬레이터에 설치되어 있습니까?

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 

내 경고는이 문제가 아닐 수 있습니다. 내가 CPU/ABI는 = (ARM) armeabi-V7A와 함께 에뮬레이터를 생성, (이 두 대상 ABI는에서 동일한는 FFmpeg 라이브러리 버전이 아닙니다하지만 난 그게 문제라고 생각하지 않습니다) 그리고

내 응용 프로그램을 시작할 때 lib가로드되지 않습니다 ("x86"기반 장치 인 경우 "x86"lib가로드되어 작동 함). 셸을 사용하여 (에뮬레이터) 탐색 할 때 다음과 같이 볼 수 있습니다.

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

"x86"lib 만 설치되었습니다. 설명이 필요합니까?

(I은 삼성 갤럭시 S3에서 테스트 같은 문제가 ...에서, CPU는 ARM 코어 텍스 A9해야하며,이 CPU는하는 ARMv7-A 아키텍처를 구현한다.하지만 내 라이브러리 중 하나를 찾을 수 없음) 내가 ANDROID.MK오류를 해결 일부 MANIP 후에 & & & & & & & & &

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

내가 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 ** 디렉토리에 필요한 라이브러리가 있습니까? 그렇지 않다면 - 자바 모듈에서 ABI 필터를 살펴보십시오. – user1056837

+0

예 생성 된 .apk 파일에 @ user1056837 안에있는 라이브러리가 있습니다. – N0un

+0

응용 프로그램 시작시 java 함수'System.loadLibrary()'를 사용하고 해당 예외를 catch하도록 제안 할 수 있습니다. 예외 메시지에는 시스템이 라이브러리를 찾으려고하는 정보가 있습니다. 유용 할 수 있습니다. – user1056837

답변

1

마지막으로 @ user1056837의 도움으로 문제가 해결되었습니다. 다른 라이브러리에 의존하는 libmylib.so를 사용하고자 할 때

ABI "86"를

(? 적어도), 당신은 단지 libmylib로드 할 수 있습니다

나에 대해 검색 할 필요가 이상한 일이 있다는 것입니다 .그래서 :

System.loadLibrary("mylib"); 

그러나 ABI "armeabi-V7A"(? 적어도), 수동으로 lib에, 당신의 lib 디렉토리의 의존성, 그리고 lib 디렉토리의 의존도의 종속성을로드 할 수에 대한

...

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

나는 지금 명확한 설명이 없다. 그러나 나는 그것을 발견 할 것이다. 나는 그것이 누군가를 도울 수 있기를 바랍니다.

EDIT : 문제는 대상 아치가 아니라 내 원시 코드/라이브러리 컴파일입니다.