官方的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
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
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return env->NewStringUTF("Hello from JNI !");
}就这样而已啊。我的文件从*.c转成*.cpp,里面(*env)改成了env,其它的没动,还要改什么?我可以编译成功,但在模拟器和真机里调试都是一启动就异常,没法执行。
extern "C"是用来处理(*env)->NewStringUTF的,我已经写成env->NewStringUTF,就不需要加了。
那我要用STL呢?用extern "C"包起来会不会好一些?
另外,据说只有cpp文件的话在里面要实现jni_onLoad函数,我没有试。