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

sas*_*alm 4 c++ qt android linker-errors qtandroidextras

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

返回int时,此代码可正常编译:

jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其更改为调用返回字符串的函数,它将失败:

jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");
Run Code Online (Sandbox Code Playgroud)

它失败了

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

既然QAndroidJniObject::callStaticMethod是模板函数,那么如何为一种类型定义它却为另一种类型定义它呢?

编辑:其实,我只是测试jobjectjbyteArrayjbooleanArrayjbytejboolean,等,这是我发现了什么-只有整数类型,如jshortjintjlongjboolean工作,同时字符串,数组和对象都给出一个undefined reference错误。

lpa*_*app 5

正如你可以看到在下面的表格中,整数类型是原始的,而其余的都是对象类型。因此,我建议您尝试改用:

jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")
Run Code Online (Sandbox Code Playgroud)

这不是错误,而是功能。查看此问题跟踪器条目官方立场,:

QAndroidJniObject / jstring:无参考