java jni编程详细步骤及注意细节

来源:互联网 发布:iphone录屏软件 编辑:程序博客网 时间:2024/06/06 00:32

第一步:

编写init.java文件

package com.dbc.yangg;public class init{        public native void print(String str);        static{                System.loadLibrary("MyJni");        }        public static void main(String[] argv){                System.out.println("hello");                new init().print("jni callback!");        }}

注意:init.java 文件放在文件系统中的目录结构应该是~/jni/com/dbc/yangg/init.java

第二步:

进入~/jni/com/dbc/yangg/目录使用命令编译init.java文件生成init.class文件

javac init.java
第三步:

进入~/jni/使用命令生成c/c++ core head文件

javah -jni com.dbc.yangg.init
将在 ~/jni/目录下生成com_dbc_yangg_init.h的c/c++ core head 文件内容如下

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_dbc_yangg_init */#ifndef _Included_com_dbc_yangg_init#define _Included_com_dbc_yangg_init#ifdef __cplusplusextern "C" {#endif/* * Class:     com_dbc_yangg_init * Method:    print * Signature: (Ljava/lang/String;)V */JNIEXPORT void JNICALL Java_com_dbc_yangg_init_print  (JNIEnv *, jobject, jstring);//需要实现的方法#ifdef __cplusplus}#endif#endif

第四步:

由于我们在java里面调用的动态类库名为MyJni,使用命令mv com_dbc_yangg_init.h MyJni.h将生成的com_dbc_yangg_init.h重命名为MyJni.h,并编写MyJni.c实现MyJni.h中

JNIEXPORT void JNICALL Java_com_dbc_yangg_init_print(JNIEnv *, jobject, jstring)方法

MyJni.c代码示例如下:

#include "MyJni.h"#include <stdio.h>JNIEXPORT void JNICALL Java_com_dbc_yangg_init_print  (JNIEnv *env, jobject obj, jstring jstr){        char *cstr=(char *)(*env)->GetStringUTFChars(env,jstr,NULL);        printf("%s\n",cstr);}
第五步:

在目录~/jni/下使用命令生成动态链接库

gcc -fPIC -shared -o libMyJni.so MyJni.c -I/usr/java/jdk-1.6.0_u45/include -I/usr/java/jdk-1.6.0_u45/include/linux -I.
注意:动态链接库so文件前缀必须是以lib开头

说明:

/usr/java/jdk-1.6.0_u45 为jdk的安装路径 主要是加载jni.h文件 $JDK_HOME/include/linux 系统类型

执行完后将在~/jni/目录下生成libMyJni.so 及是我们需要的动态链接库

第六步:

运行测试:进入目录~/jni/输入命令

java -Djava.library.path=/home/hadoopadmin/jni/com/dbc/yangg/ com.dbc.yangg.init

运行结果如下:

hellojni callback!
说明配置成功








0 0
原创粉丝点击