zoukankan      html  css  js  c++  java
  • Android NDK开发method GetStringUTFChars’could not be resolved

    Android NDK开发method GetStringUTFChars’could not be resolved

     

    图1

    最近用到android的ndk,但在eclipse中提示method GetStringUTFChars’could not beresolved这样的错误,但奇怪的是我也增加了图1的代码到android-ndk-r10bsampleshello-jnijnihello-jni.c中却没有这个编译错误,我分别右击编译出错的AppCenter和hello-jni工程,发现AppCenter工程属性多了C/C++ Build和C/C++ General,如下图:


    图2

    解决办法是右键工程 property->C/C++ General->CodeAnalysis—>配置当前工程(或者workspace)->使 method cannot be resolved  不选中(即此项不进行报错 )

     

    这样就可以编译成功了,但我在做一些测试又改回编译OK的状态,却有另一个编译错误:

    no matchingfunction for call to '_JNIEnv::GetStringUTFChars(JNIEnv*&, _jstring*&,

            jboolean*)'

    改为下面的代码就可以了

    const char*path_utf = env->GetStringUTFChars(path, &iscopy);

     

    可以为什么在anroid NDK中自带的例子没有这个问题呢?因为Android NDK带的jni例子都是使用C定义JNI接口,但是在项目中,因为Native代码是用C++编写的。

    JNIEnv *env参数的使用有下面的差别:

    所有JNI接口的第一个参数是JNIEnv *env, 在C中,使用方法是

    (*env)->NewStringUTF(env,"Hello from JNI!");

    但在C++中,其调用方法是

    env->NewStringUTF("Hellofrom JNI!");

     

    我们来看jni.h的相关内容:

    #if defined(__cplusplus)

    typedef _JNIEnvJNIEnv;

    typedef _JavaVMJavaVM;

    #else

    typedef const struct JNINativeInterface* JNIEnv;

    typedef const struct JNIInvokeInterface* JavaVM;

    #endif

    可以看到,对于C和C++,定义有所不同,主要原因是C不支持类,所以采用了一种变通的方法,下面给出JNIEnv分别对应C和C++的定义:

    (1)  C

    /* JNI spec says this returns const jbyte*, but that'sinconsistent */

    const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);

     

    (2)  C++

    struct _JNIEnv {

    ……….

    const char*GetStringUTFChars(jstring string, jboolean* isCopy)

    {returnfunctions->GetStringUTFChars(this, string, isCopy); }

    ………………

    }

     

    参考链接:

    Eclipse Ndk开发中的Method 'NewStringUTF' could not be resolved问题

    http://www.android100.org/html/201308/09/3935.html

     

    jni 调用c和c++的区别.

    http://blog.csdn.net/kandyer/article/details/9097203

     

  • 相关阅读:
    CSS3的[att$=val]选择器
    CSS3的[att^=val]选择器
    CSS3的[att*=val]选择器
    CSS3的[att=val]选择器
    web报表工具finereport常用函数的用法总结(数组函数)
    web报表工具finereport常用函数的用法总结(数组函数)
    人性多面性的终极教材——北漂18年(4)
    第23章 MYSQL结构
    11g OS文件移动到ASM
    Oracle 10g TAF配置
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298373.html
Copyright © 2011-2022 走看看