JNI——JAVA调用C
1. 编译java:javac JNIDemo.java
2. 编译JNI:gcc -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include/ -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include/linux/ -fPIC -shared -o libnative.so native.c
export LD_LIBRARY_PATH=.
3. 执行:java JNIDemo
字段描述符取巧办法:
1. javac JNIDemo.java
2. javah -jni JNIDemo
生成一个头文件:JNIDemo.h
字符串的传递:
const jbyte *cstr;
cstr = (*env)->GetStringUTFChars(env, str, NULL);
if(cstr == NULL)
{
return NULL;
}
printf("Get string from java: %s\n", cstr);
(*env)->ReleaseStringUTFChars(env, str, cstr);
return (*env)->NewStringUTF(env, "return from c");
数组的传递:
jint *carr;
jint i, sum = 0;
carr = (*env)->GetIntArrayElements(env, arr, NULL);
if(carr == NULL)
{
return 0;
}
for(i = 0; i < (*env)->GetArrayLength(env, arr); i++)
{
sum += carr[i];
}
(*env)->ReleaseIntArrayElements(env, arr, carr, 0);
return sum;
传入数组参数,返回数组参数:
jint *carr;
jint *oarr;
jintArray rarr;
jint i, n = 0;
carr = (*env)->GetIntArrayElements(env, arr, NULL);
if(carr == NULL)
{
return 0;
}
n = (*env)->GetArrayLength(env, arr);
oarr = malloc(sizeof(jint) * n);
if(oarr == NULL)
{
(*env)->ReleaseIntArrayElements(env, arr, carr, 0);
return 0;
}
for(i = 0; i < n; i++)
{
oarr[i] = carr[n - 1 - i];
}
/* crate jintArray */
rarr = (*env)->NewIntArray(env, n);
if(rarr == NULL)
{
return 0;
}
(*env)->SetIntArrayRegion(env, rarr, 0, n, oarr);
free(oarr);
return rarr;
最新文章
- 1306. Sorting Algorithm 2016 12 30
- Mysql 列转行统计查询 、行转列统计查询
- event相关
- 理解SQL Server中的权限体系(上)----主体
- [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
- Java 并发:Executors 和线程池
- Android核心分析 之九Zygote Service
- JsRender系列demo(6)-无名
- bzoj2324营救皮卡丘
- Linux编程之《守护进程》
- [BZOJ 1028] [JSOI2007] 麻将 【枚举+贪心判断】
- .NET常用的扩展方法整理
- Error与Exception的区别
- TDD单元测试驱动
- 阅读Facebook POP框架 笔记(一)
- Swing-JRadioButton用法-入门
- 百度病了,必应挂了,Yandex疯了。
- unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度
- Java的JDK下StringBuffer与StringBuilder的区别
- Bootstrap学习目录
热门文章
- S3C2440 IIS操作 uda134x录放音
- Atitit.ati&;#160;&;#160;str&;#160;&;#160;字符串增强api
- eclipse工具栏sdk和avd图标
- python(32)- 模块练习Ⅱ:使用正则表达式实现计算器的功能
- Java集合01----ArrayList的遍历方式及应用
- TNS-01201: Listener cannot find executablen 错误
- start-dfs.sh 和 start-all.sh的区别
- CentOS 7.2 , YUM 方式安装VSC
- 【TensorFlow-windows】(一)实现Softmax Regression进行手写数字识别(mnist)
- C++代码书写模板 -- 如何判断函数类型