我把NDK里的hello-jni示例文件的hello-jni.c改成hello-jni.cpp,Android.mk里也改成
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.cppinclude $(BUILD_SHARED_LIBRARY)结果编译总提示
make: *** No rule to make target `jni/hello-jni.c', needed by `obj/local/armeabi/objs-debug/hello-jni/hello-jni.o'. Stop.
为什么它会去找hello-jni.c而不是hello-jni.cpp?
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.cppinclude $(BUILD_SHARED_LIBRARY)结果编译总提示
make: *** No rule to make target `jni/hello-jni.c', needed by `obj/local/armeabi/objs-debug/hello-jni/hello-jni.o'. Stop.
为什么它会去找hello-jni.c而不是hello-jni.cpp?
LOCAL_SRC_FILES := hello-jni.cpp
LOCAL_CFLAGS := -fexceptions
include $(BUILD_SHARED_LIBRARY)
错了 先清除.so
谢谢,这个方法管用。
但出了个新问题,但出了新问题,一模一样的代码,hello-jni.c的时候可以正常编译,hello-jni.cpp就编译不通过,提示如下,这是怎么了?D:/android-ndk-r6/samples/hello-jni/jni/hello-jni.cpp: In function '_jstring* Ja
va_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv*, _jobject*)':
D:/android-ndk-r6/samples/hello-jni/jni/hello-jni.cpp:33: error: base operand of
'->' has non-pointer type '_JNIEnv'
make: *** [/cygdrive/d/android-ndk-r6/samples/hello-jni/obj/local/armeabi/objs-d
ebug/hello-jni/hello-jni.o] 错误 1
C: (*env)->FindClss(env,"java/lang/String;");
C++: env->FindClass("java/lang/String;");
也就是说C和C++在使用env的时候有一个是用到指针(姑且这样理解吧)