Androi NDK生成 找不到对应的C的函数异常

来源:互联网 发布:适合iphone的软件 编辑:程序博客网 时间:2024/04/30 20:19

前两天一直遇到个问题,就是用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对于数据类型的定义如下:

 

0 0