您的位置:首页 > 其它

Ubuntu下JNI的使用

2016-08-19 11:34 197 查看
本文内容参考如下链接:

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 __cplusplus
extern "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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: