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;

JNI——JAVA调用C的更多相关文章

  1. cocos2d 中使用jni Java 调用 C++ 方法

    1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件.放在安卓文件夹下的libs/armeabi 下,然后java会load进来,这步我们不用做了,由于cocos2d已 ...

  2. [JNI] Java 调用 C++ dll

    首先介绍一下JNI吧! JNI 是Java提供的一个用于调用本地接口的接口层,位于Java代码 和 本地代码之间的一层:主要功能是 数据类型的转换,还有就是通过这一层来调用本地代码! 下面就说说Jav ...

  3. JNI Java调用C代码 示例

    Activity public class MainActivity extends ListActivity {     static {         System.loadLibrary(&q ...

  4. JNI——Java调用C/C++函数

    从C/C++到Java,再从Java回到C/C++,今天终于有机会了解了连接Java.C/C++的桥梁——JNI.哈哈!分享一下!   一.简介 JNI是Java native interface的简 ...

  5. ubuntu下使用JNI Java调用C++的例子

    TestJNI.java public class TestJNI { static{ System.load("/home/buyizhiyou/workspace/JNI/src/lib ...

  6. cocos2d 中使用jni C++ 调用 Java 方法

    1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...

  7. Android使用JNI(从java调用本地函数)

    当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...

  8. Android JNI之JAVA调用C/C++层

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 一.java调用本地函数的开发步骤: 1.编写本地方法的类(可以说是用来叙述本地方法的类 ...

  9. linux下java调用.so文件的方法1: JNI

    摘自http://blog.163.com/squall_smile/blog/static/6034984020129296931793/ https://my.oschina.net/simabe ...

随机推荐

  1. karaf中利用Bundle引入外部log4j配置文件

    环境准备: 1.在karaf_home下新建 config及logs目录 2.将mylog4j.properties拷贝到config文件夹下 查看log4j-1.2.17.jar/MANIFEST. ...

  2. PS 基础知识 .atn文件如何使用

    ANT文件就是Frames.atn类动作文件 具体安装步骤如下 : (以CS4 为例) 启动Photoshop 点击"窗口" 选"动作" 在弹出的动作面板里,点 ...

  3. VueJS标签消息显示HTML:v-html

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  4. javascript 高级编程系列 - 函数

    一.函数创建 1. 函数声明 (出现在全局作用域,或局部作用域) function add (a, b) { return a + b; } function add(a, b) { return a ...

  5. CentOS Linux搭建独立SVN Server全套流程(转)

    环境为centos6.3 1.首先 看看机器上安装了svn了没有 rpm -qa |grep svn 2.如果没有安装 执行 yum -y install subversion 3.安装好了之后 新建 ...

  6. maven的介绍和安装

    一.maven简介 Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期. 在 ...

  7. wcf系列(一)--- 寄宿方式

    一.自我寄宿(self-hosting) 1.wcf采用基于终结点(Endpoint)的通信手段:终结点由:地址(Address)+绑定(Binding)+契约(Contract)组成:  Enpoi ...

  8. 九度OJ 1089:数字反转 (数字反转)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3059 解决:1678 题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个 ...

  9. java之选择排序

     //选择排序(Select Sorting)也是一种简单的排序方法.它的基本思想是:第一次从R[0]-R[n-1]中选取最小值,与R[0]交换,第二次从R[1]-R[n-1]中选取最小值,与R[1] ...

  10. [数据挖掘课程笔记]关联规则挖掘 - Apriori算法

    两种度量: 支持度(support)  support(A→B) = count(AUB)/N (N是数据库中记录的条数) 自信度(confidence)confidence(A→B) = count ...