2012-10-29 4 views
1

이미 주 동안이 붙어있다을 사용하는 경우.안드로이드 UnsatisfiedLinkError를 네이티브 라이브러리

나는 안드로이드 토런트 클라이언트에서 libtorrent을 사용하고있다. 최근에는 자석 링크와 같은 새로운 기능을 추가하고 싶었습니다.

모든 기본 기능 PROJECT_FOLDER/jni/libtorrent.h에 선언하고 PROJECT_FOLDER/jni/libtorrent.cpp에서 구현됩니다.

지금까지 아무 잘못 없지만, 최근에, 나는 libtorrent.h에 새로운 기능을 추가 :

JNIEXPORT jstring JNICALL Java_com_my_package_LibTorrent_MagnetToTorrent 
(JNIEnv *env, jobject obj, jstring MagnetLink, jstring TorrentFolder); 

내가 libtorrent.cpp

JNIEXPORT jstring JNICALL Java_com_my_package_LibTorrent_MagnetToTorrent 
(JNIEnv *env, jobject obj, jstring MagnetLink, jstring TorrentFolder) { 
     //function code here 
} 

내가 코드에 ndk-build를 실행에 구현을 추가하고, 그것은 컴파일되었습니다.

public native String MagnetToTorrent(String MagnetLink, String TorrentFolder); 

하지만 호출 할 때마다, 나는 UnsatisfiedLinkError: MagnetToTorrent를 얻을 :

com.my.package.LibTorrent 클래스에서 나는 이전에 괜찮 았는데 다른 네이티브 메소드를 선언 한 다음 선언, 같은 방법을 추가했습니다. 전에 네이티브 함수를 추가 한 이후로 이것은 정말 이상합니다.

모든 도움을 주시면 대단히 감사하겠습니다. 고맙습니다.

편집 : libtorrent.h에 선언 모든 기능이 같은 extern "C" {}로 둘러싸여있다 :

#ifdef __cplusplus 
extern "C" { 
#endif 
/*Function declarations*/ 
#ifdef __cplusplus 
} 
#endif 
+1

는 트리플 .H 및 .CPP –

+0

@AndrewG 감사 모두에서 전체 패키지 이름 Java_com_my_package_LibTorrent_MagnetToTorrent에 맞춤법을 검사,하지만 난 이미 확인 : 응용 프로그램이 UnsatisfiedLinkError를 발생시킬 수있는 다른 문제에 대해서는이 링크는 도움이 될 수 있습니다 여러 번, 나는 잃어 버렸어. 나는 지금까지 그것을 보아 왔어 야한다고 생각합니다. 그래서 그럴 것입니다. – Gabriel

답변

0

나는 마지막으로 잘못 알아 냈어. 나는 jni/Application.mk이 줄을 추가했다 :

APP_ABI := armeabi armeabi-v7a 

이 네이티브 코드도 내 새 휴대 전화에 무엇을 가지고하는 ARMv7 프로세서를 위해 구축되도록한다.

모든 다른 답변도 비슷한 문제를 가진 다른 개발자에 유용합니다. 나는 그들 각각에 +1을 표시했다. http://developer.android.com/guide/practices/jni.html#faq_ULE

2

당신이 extern "C"를 잊은 가능성은? 내가 볼

+0

아니요, extern "C"가 헤더 파일에 있습니다. 내 게시물의 수정보기 – Gabriel

1

유일한 이유는 네이티브 라이브러리가 기호가되지 않는다는 것입니다. 마지막 라이브러리 변경 (당신이 당신을 위해 일했다고 주장한) 이후 우연히 빌드 경로 및/또는 빌드의 다른 측면을 변경하지 않았습니까? Java 빌드에서 알지 못하는 다른 장소에 "최신"라이브러리가 빌드되지 않았습니까? 라이브러리 파일 (.so?)을 찾아 내 보낸 심볼을 검사하십시오 (dumpbin, objdump, nm, 플랫폼마다 다름). 자바 빌드가 실제로로드하는 하나의 라이브러리인지 확인하십시오.

관련 문제