簡體   English   中英

JNI_OnLoad錯誤:無法使用signature()Ljava / lang / String查找本機函數的decl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM