您的位置:首页 > 运维架构 > Linux

linux下jni的开发步骤

2013-12-26 16:57 543 查看
下面展示一个linux下java通过jni调用动态库的方法。留以备用

jni的内容较多,包括双向调用,传递基本类型参数,传递二进制参数,传递引用类型等。具体内容请参考jni专门的知识,我这里只做helloworld,演示linux下的开发步骤。

1.创建一个HelloJni.java的文件

public class HelloJni{
public native void sayHello();

static{
System.loadLibrary("hellojni");
}

public static void main(String[] args){
new HelloJni().sayHello();
}
}


2.编译这个java文件:javac HelloJni.java

当前目录下会生成一个HelloJni.class的文件

3.使用javah 工具生成c语言的头文件: javah HelloJni

此时,会发现当前目录多出了一个HelloJni.h的头文件

查看这个文件的内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloJni */

#ifndef _Included_HelloJni
#define _Included_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     HelloJni
* Method:    sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloJni_sayHello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
可以看到,这个头文件通过宏来实现在c和c++下的共用。

4.新建一个hellojni.c的文件,实现上面的方法: vi hellojni.c

#include <stdio.h>
#include <jni.h>
#include "HelloJni.h"

JNIEXPORT void JNICALL Java_HelloJni_sayHello(JNIEnv *env, jobject obj){
printf("Hello Dynamic Link Library has been calling!\n");
}


5.编译这个c文件: gcc -c hellojni.c

当前目录下会生成一个hellojni.o的文件

6.生成一个so动态库: gcc -shared -o libhellojni.so hellojni.o

当前目录下会生成一个libhellojni.so的动态共享库

此时目录中的文件列表如下:

HelloJni.java
HelloJni.class
HelloJni.h
hellojni.c
hellojni.o
libhellojni.so


现在,就可以运行一下这个java程序看看效果了

java -Djava.library.path=.  HelloJni
输出结果为:

Hello Dynamic Link Library has been calling!


到此,实验完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: