AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
在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