Ubuntu下JNI的使用

来源:互联网 发布:手机翻译软件推荐 编辑:程序博客网 时间:2024/06/07 07:50

本文内容参考如下链接:

http://www.cnblogs.com/bastard/archive/2012/05/17/2506877.html

第一步:

创建一个 Test.java文件

    public class Test {          //此处定义的便是native方法,在Test.c中实现          native public void doSomeThing();                public static void main (String args[]) {                     Test test = new Test();              test.doSomeThing();          }          static{              //参考文献中采用的System.loadLibrary,在使用时提示找不到lob test,因此采用绝对路径加载库           System.load("/home/wangkuan/Desktop/testjni/libtest.so");          }      }  

第二步:

生成 Test.h文件

执行命令:javah -jni Test,若提示找不到命令,则安装java

      生成Test.h文件,如下

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class Test */#ifndef _Included_Test#define _Included_Test#ifdef __cplusplusextern "C" {#endif/* * Class:     Test * Method:    doSomeThing * Signature: ()V */JNIEXPORT void JNICALL Java_Test_doSomeThing  (JNIEnv *, object);#ifdef __cplusplus}#endif#endif

第三步:

      创建Test.c文件

      @param JNIEnv:是一个线程相关的结构体,代表了java在本线程的运行环境

      @param jobject:指向在此 Java 代码中实例化的 Java 对象 LocalFunction 的一个句柄,相当于 this 指针

#include <stdio.h>  #include "Test.h"  //这里要包含刚才生成的头文件  JNIEXPORT void JNICALL Java_Test_doSomeThing(JNIEnv * name, jobject o)  {      printf("HelloWorld");      return;  } 

第四步:

      编译生成libtest.so文件

      输入命令:

      gcc -fPIC -D_REENTRANT -I/usr/local/java/jdk1.7.0_40/include -I/usr/local/java/jdk1.7.0_40/include/linux -c test.c -o libtest.so
            -I后面的是java的include文件夹的地址,请根据您具体的java版本以及安装路径作相应的改变。。(我这里是/home/zuo/java/java-1.6/include)
           -f后面的PIC表示生成的库中符号是与位置无关的。
           -shared表示共享,共享库后缀名为.so。

           -o libIntArray.so ,可以理解为编译后生成libIntArray.so库。

第五步:

         运行Test.java;

         运行结果:Helloworld





0 0