[英]JNI error Exception in thread “main” java.lang.UnsatisfiedLinkError: (Ljava/lang/String;)Ljava/lang/String;
[英]JNI_OnLoad error: Unable to find decl for native function with signature ()Ljava/lang/String
我目前正在使用SWIG / jni從Java為Android應用程序調用C ++函數。 但是,只要函數返回jstring,我就會遇到困難。 在應用程序啟動時,我在LogCat中收到以下錯誤...
錯誤 :無法為本機Lcom / example / swigJNI找到decl; .plugin_name:L()java / lang / String
錯誤 :無法為本機Lcom / example / swigJNI找到decl; .plugin_description:L()java / lang / String
以下是一些可能有用的代碼來檢查......
SWIG生成的包裝代碼:
SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1name(JNIEnv *jenv, jclass jcls) {
jstring jresult = 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
result = (char *)plugin_name();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1description(JNIEnv *jenv, jclass jcls) {
jstring jresult = 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
result = (char *)plugin_description();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
JNI原生方法聲明:
static const JNINativeMethod methods[] = {
{"plugin_name", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1name},
{"plugin_description", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1description}
};
當函數返回int時,我已成功執行JNI_onLoad()和RegisterNatives(),但字符串對我來說是個問題。 我不太明白這些功能是如何找不到的。 有什么東西我不見了嗎?
啊,我覺得自己像個笨蛋!
我用於字符串的簽名是......
()Ljava/lang/String
什么時候應該......
()Ljava/lang/String;
忘了分號。 確認!
您是否將java類的頭文件(生成的c頭文件)放在c ++代碼中,其中定義了本機方法。
因此,生成一個C頭文件,其中包含本機方法實現的函數原型
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.