多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在JNI中使用jarray以及像jintArray等子类表示数组。正如jstring不是一个C的字符串类型,jarray也不是C的数组类型。你不能在Java_IntArray_sumArray的实现代码中通过jarray间接引用其组成元素。以下C代码是不合法的,也不会产出预期的结果: ~~~ /* This program is illegal! */ JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv* env, jobject obj, jintArray arr) { int i, sum = 0; for(i = 0; i < 10; i ++){ sum += arr[i] } } ~~~ 你必须使用相应的JNI函数来访问数组元素,就像下边展示的那样: ~~~ /* * Class: IntArray * Method: sumArray * Signature: ([I)I */ JNIEXPORT jint JNICALL Java_IntArray_sumArray (JNIEnv * env, jobject obj, jintArray arr) { jint buf[10]; jint i, sum = 0; (*env)->GetIntArrayRegion(env, arr, 0, 10, buf); for (int i =0; i < 10; i ++){ sum += buf[i]; } return sum; } ~~~ 编译以上代码请添加-std=c99 >gcc -I/home/wangli/env/jdk8/usr/java/jdk1.8.0_20/include -I/home/wangli/env/jdk8/usr/java/jdk1.8.0_20/include/linux IntArray.c -shared -o libIntArray.so -fPIC -std=c99