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
- java jni编程详细步骤及注意细节
- Java编程细节注意
- Java 编程需要注意的细节
- jni 开发细节 注意点
- jni编程细节记录
- JNI编程步骤
- JNI操作的详细步骤
- JNI实例教程,附详细步骤
- android jni开发详细步骤
- Android调用JNI详细步骤
- Java编程中那些需要注意的细节
- Java调用C#WEBSERVICE需要注意的细节及实例
- Java中split()函数的用法及一些注意细节
- Java Jni 注意
- JNI编程(Java访问C/C++ DLL)的大致步骤
- 编程需要注意的细节
- Perl: 编程注意细节杂记
- iOS 注意细节及使用方法
- Java百问
- 第十七周-(项目一(1))体会函数参数传递。
- hibernate 一对多 jsp显示
- linux输入子系统
- TestGenerator: unmatched data error
- java jni编程详细步骤及注意细节
- 自动搜索方式的流程
- 黑马程序员:C#中的属性和修饰符
- ios开发中init()方法重复执行,以及实例变量错乱的灵异现象
- 第17周项目1:体会函数参数传递(1)
- Db2Helper
- 17周项目二,1,(数组名做形参)
- HTML5 LocalStorage 本地存储
- 二叉树的遍历