인기있는 문제인 것 같습니다.Java 파일에서 C++ 파일의 C++ 메소드를 호출 할 때 UnsatisfiedLinkError가 발생합니다.
그리고 여전히 해결책을 찾지 못했습니다.
package name
: app.cloudstringers
Java file : Completed.java
static {
try {
System.loadLibrary("ffmpeg");
} catch (UnsatisfiedLinkError e) {
Log.d("", "Error : " + e.toString());
}
}
// Define native method
public native int getString();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.page_completed);
// Call native method
Log.d("", "" + getString());
C++ file : ffmpeg.cpp
#include <jni.h>
#include <android/log.h>
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jstring JNICALL Java_app_cloudstringers_Completed_getString(JNIEnv* env, jobject thiz)
{
jstring strRet = env->NewStringUTF("HelloWorld from JNI !");
return strRet;
}
#ifdef __cplusplus
}
#endif
Android.mk file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := ffmpeg.cpp
include $(BUILD_SHARED_LIBRARY)
나는 응용 프로그램을 실행하지만, 여전히 오류 예외에게이 문제를 해결하는 방법,
내게 알려주십시오 알고UnsatisfiedLinkError : getString
사람,
감사
UPDATE 따르 @dextor를 얻을 수 대답. 죄송합니다. 실수를해서. 이 질문에 필요한 것은 public native int getString()
에서 public native String getString()
으로 바뀝니다.
이제 작동합니다.
라이브러리로드 시도로 생성 된 메시지와 ** 전체 ** 만족하지 않은 링크 오류를 포함하도록 스택 추적을 게시하십시오. 또한 원시 메소드가 정의 된 Java 파일의 이름을 제공하십시오. –
그리고 의미있는 오류 보고서를 얻을 수 있도록 catch 블록에 e.printStackTrace()를 포함시켜야합니다. –
'System.loadLibrary ("ffmpeg");의 try-catch는 실행되지 않습니다. 괜찮아. –