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

자바로 jni 연동해서 실행중인데 에러가발생합니다.

0 추천

ㅠㅠ 해결책좀부탁드립니다 ..

음무 (17,820 포인트) 님이 2014년 2월 11일 질문

2개의 답변

+1 추천
 
채택된 답변
UnsatisfiedLinkError네요...

android.mk에서 빌드할 파일들의 패스를 확인해보세요...

ndk-build 성공 하신거죠?
칠리님 (10,910 포인트) 님이 2014년 2월 11일 답변
음무님이 2014년 2월 12일 채택됨
자바(win32)에서 실행하는거라 android.mk가 없습니다 제가 잘못하고있는건가요 ? ndk-build는 성공했습니다
안드로이드 환경이 아니군요...
lib{library_name}.so 가 로드될 라이브러리 입니다.
java.lang.UnsatisfiedLinkError: 의 잘린 부분의 로그도 보고싶네용...
일반자바 환경이면 원래 no pesq in library path 라고 나와야할텐데...

JVM이 해당 NativeLibrary를 찾지 못해 발생하는 현상이니
운영체제에 맞는 PATH를 설정해 주면 될껍니다...

win환경이니 윈도우 환경변수 PATH에 해당 라이브러리 경로를 추가해 보세용
아마 no pesq in java.library.path 로 나왔겠죠...
링크하나 첨부해 봅니다..
http://www.coderanch.com/t/377174/java/java/java-library-path
희안하게 cygwin으로 컴파일하면 class파일이 생성되는데
이클립스에서 run하면 위와같은 에러가납니다 ..
위 에러는 lib{library_name}.so를 찾을 수 없는 경우에 나옵니다.
JVM이 libpesq.so를 찾지 못한것이지요...
libpesq를 JVM이 찾을 수 있는 곳에 위치 시켜야 합니다.

음 해보진 않았지면
eclipse.ini파일안에
-Djava.library.path=C:\해당라이브러리경로\pesq.so
처럼 옵션 추가하면 되지않을까요...

아니면 run configuration에서 arguments에 추가해 보세요...
0 추천

칠리님 말씀대로 android.mk 에 만들어질 라이브러리 이름이 매치가 안되는거 같네요.

 

Android.mk 파일

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := pesq
LOCAL_SRC_FILES := 참조파일
include $(BUILD_SHARED_LIBRARY)

 

라이브러리 로드할 파일

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

초보개발자ㅠ (33,870 포인트) 님이 2014년 2월 11일 답변
자바로실행하는거라 Android.mk파일은 아예 뺐는데요.. 혹시나해서 넣어도 마찬가집니다. 아, 안드로이드로 실행하면 실행 됩니다.
자바로 옮겨서 실행하려니 잘 안되네요 ㅠㅠ 같은에러가납니다
음.. ndk-build 성공하셨다고 하셨는데 그럼~ 패키지익스플로러에 현재 프로젝트 폴더내에 libs 폴더가 있는지 또 그 안에 libpesq.so 파일이 있는지 확인해보세용
다있습니다 ㅠㅠ ㅠㅠㅠㅠㅠㅠ
...