마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

.so 라이브러리 로드 오류 질문입니다.

0 추천

안녕하세요.

리눅스에서 .so 라이브러리를 만들었습니다.

그후 

static {
    System.loadLibrary("TestLibrary");
}

 

넣었습니다. 그랫더니 오류가 아래와 같이 나옵니다.

 

12-11 17:34:22.627 29986-29986/kr.sample.ctest01 E/AndroidRuntime: FATAL EXCEPTION: main
Process: kr.sample.ctest01, PID: 29986
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/kr.sample.ctest01-1/base.apk"],nativeLibraryDirectories=[/data/app/kr.sample.ctest01-1/lib/arm64, /system/lib64, /vendor/lib64]]] couldn't find "libTestLibrary.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:972)
at java.lang.System.loadLibrary(System.java:1567)
at kr.sample.ctest01.MainActivity.<clinit>(MainActivity.java:12)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1086)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2839)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

 

 

라이브러리 경로는 사진처럼 해놨습니다...

사용중인 개발 휴대폰은 64비트 휴대폰입니다..

 

 

꾸우우 (1,140 포인트) 님이 2017년 12월 11일 질문

1개의 답변

0 추천
라이브러리가 두갠데,  libEmvLibrary.so를 libTestLibrary.so가 참조하나요?

만약 그렇다면,  

static {

System.loadLibrary("EmvLibrary");

System.loadLibrary("TestLibrary");

}

와 같이 EmvLibrary 를 먼저 로드하고, TestLibrary 를 로드하도록 수정 해 주셔야 심볼을 찾습니다.
익명사용자 님이 2017년 12월 12일 답변
안녕하세요.
EmvLibrary 를 사용해야하는데, 오류가 발생해서 간단한걸로 테스트해볼려고  TestLibrary 를 만들었습니다.

int main() {
    printf("Hello World \n");
    system("pause");
    return 0;
}
TestLibrary  는 위와 같이 그냥 찍어두기만 한 간단한 라이브러리입니다..
눈빛님 감사드려요
적용해 봣는데, 똑같이 강제종료되더라구요.

그래서 2곳에 추가후 ,
libnative-lib.so   라고 "Include C++ support" 체크후 만들면 만들어지는 so 파일로 해보니까 오류가 안나네요..ㅜ 제가 so 파일을 잘 못 만든거같습니다...ㅜ

so 파일 만드는 것부터 다시 해봐야할거같습니다. 어디가 오류인지는 알게되서 속은 시원하네요..! 감사합니다.
...