官方的hello-jni示例,把hello-jni.c改成hello-jni.cpp后编译成功,但一运行就出错。发现编译时提示有libstdc++.a,而obj目录下这个文件只有8字节,所以我想会不会是按C++方式编译,导致程序找不到C++标准函数库的原因?请问怎么解决?Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup       : libs/armeabi/gdb.setup
Compile++ thumb  : hello-jni <= hello-jni.cpp
StaticLibrary  : libstdc++.a
SharedLibrary  : libhello-jni.so
Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

解决方案 »

  1.   

    jstring
    Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                      jobject thiz )
    {
        return env->NewStringUTF("Hello from JNI !");
    }就这样而已啊。我的文件从*.c转成*.cpp,里面(*env)改成了env,其它的没动,还要改什么?我可以编译成功,但在模拟器和真机里调试都是一启动就异常,没法执行。
      

  2.   

    extern "C" 可能忘记加了吧?
      

  3.   


    extern "C"是用来处理(*env)->NewStringUTF的,我已经写成env->NewStringUTF,就不需要加了。
      

  4.   

    android程序处理c++问题很多,能用c的尽量别用c++
      

  5.   


    那我要用STL呢?用extern "C"包起来会不会好一些?
      

  6.   

    既然没加 extern "C",那就是这个原因了,这个修饰对于输出符合有影响,你可以使用 nm 看一看加与不加是否有变化
      

  7.   

    解决了,用了extern "C"就可以。错误的原因应该是java找不到so的函数入口。
    另外,据说只有cpp文件的话在里面要实现jni_onLoad函数,我没有试。