前两天一直遇到个问题,就是用javah 生成的头文件,
用NDK编译后提示,找不到对应的接口,很奇怪的问题。
因为之前我用的是范例中的代码,直接按扎代码格斯copy了相应接口编译,没有问题。
可是当自己用javah生成,却不能够使用。
后来对比了生成的代码和自己手写的代码的区别,发现自动成的的接口是这样的:
JNIEXPORT jlong JNICALL Java_org_opencv_samples_XXX_nativeXXX
(JNIEnv *, jclass, jlong, jobject);
而手写的是:
JNIEXPORT jlong JNICALL Java_org_opencv_samples_XXX_nativeXXX
(JNIEnv *, jclass, jlong, jlong);
定位到是这个导致的问题。
结论:如果在java中使用的是类的数据类型,使用javah就会产生一个jobject,如果使用long,对应就会生成jlong的数据类型。接口的类型不一致,自然接口就不一样。
后来查了下JNI对于数据类型的定义如下: