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

第一步:

编写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 __cplusplus
extern "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

运行结果如下:

hello
jni callback!
说明配置成功








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值