【问题标题】:error: undefined reference to '_jstring* QAndroidJniObject::callStaticMethod<_jstring*>(char const*, char const*)'错误:未定义对 '_jstring* QAndroidJniObject::callStaticMethod<_jstring*>(char const*, char const*)' 的引用
【发布时间】:2014-12-06 11:48:27
【问题描述】:

我正在尝试使用QAndroidJniObject。作为测试,我只调用了 2 个 Java 函数,一个返回一个 int,另一个返回一个字符串。

当返回一个 int 时,这段代码编译得很好:

jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");

但是如果我把它改成调用一个返回字符串的函数,它就会失败:

jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");

失败了

错误:未定义对 '_jstring* 的引用 QAndroidJniObject::callStaticMethod<_jstring>(char const*, char 常量*)'

既然QAndroidJniObject::callStaticMethod是一个模板函数,怎么可能只为一种类型定义而另一种类型未定义呢?

编辑:实际上,我只是用jobjectjbyteArrayjbooleanArrayjbytejboolean 等进行了测试。这是我发现的——只有整数jshortjintjlongjboolean 等类型可以正常工作,而字符串、数组和对象都会给出 undefined reference 错误。

【问题讨论】:

  • 整数类型是原始类型,而 jstring 不是。
  • 所以QAndroidJniObject::callStaticMethod 不应该与jstringjobject 一起使用?

标签: android c++ qt linker-errors qtandroidextras


【解决方案1】:

正如您在following table 中看到的,整数类型是原始类型,而其余的是对象类型。因此,我建议您尝试改用:

jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")

这不是错误,而是一项功能。官方立场见this issue tracker entry

QAndroidJniObject/jstring : no reference

【讨论】:

    【解决方案2】:

    试试这个:

     QAndroidJniObject jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
     QString b = jb.toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 2016-01-19
      • 2013-11-09
      相关资源
      最近更新 更多