2013-11-28 3 views
0

C 라이브러리에서 메소드를 호출 할 때 JNI을 사용하는 프로젝트가 있습니다.작동중인 프로젝트에서 .so 라이브러리를 다른 프로젝트로 통합 할 수 없습니다.

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

그것은 잘 작동합니다

내 프로젝트의 구조 :로드 라이브러리가

enter image description here

그리고 코드입니다. 하지만 다른 프로젝트에서이 기능을 통합하려고 할 때까지. jnilibs 폴더를 복사했습니다. 또한 모두 three classes없이 RemoveBackgroundActivity (테스트 활동).

1663-1663/com.example.Activities E/dalvikvm﹕ The lib may be ARM... trying to load it [/data/data/com.example.Activities/lib/libRemoveBackground.so] using houdini 
1663-1663/com.example.Activities E/dalvikvm﹕ dvmHoudiniDlopen returns 0x9833cf40 with bool=1 

당신이 문제이나이 작업을 수행하는 다른 방법으로 해결하는 방법을 알고 계십니까 :이 프로젝트를 컴파일 할 때 나는 exeption이?

+0

1) IDEA는 확실하지 않지만 Eclipse에서는 프로젝트의 기본 개발을 활성화해야합니다. 디렉토리를 복사 할 수는 없습니다. 2) 다른 라이브러리를 연결하지 않는다면 libs 디렉토리가 필요하다고 생각합니다. 나 부분은 다른 프로젝트에 내장 된 라이브러리를로드하려고한다고 생각합니다. 3) Application.mk에 무엇이 있습니까? 일반적으로 필요하지 않습니다. 4) 네이티브 메소드를 명시 적으로 등록하지 않는 한, JNI 호출은 패키지 이름 때문에 업데이트해야 할 필요가있을 것입니다 (향후 문제 일 수 있음). – Dave

답변

0

사용하려고 시도한 RemoveBackground.so 네이티브 라이브러리가 ARM 아키텍처 용으로 빌드되지 않았다고 가정합니다. Linux에 대해서는 잘 모르겠지만 Mac OS X에서는 lipo 명령어를 사용하여 지원되는 네이티브 라이브러리 아키텍처를 확인할 수 있습니다. 예를 들면 다음과 같습니다.

lipo -info /usr/lib/RemoveBackground.so 
관련 문제