Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 内核 > Linux内核 > 正文

java jni开发

时间:2016-05-31 21:42 来源:网络整理 作者:51ou.com 阅读:

OS环境 ubuntu 16.04 STL。


java代码如下:
package com.mobile.register;

public class Starter {
static
{
System.load("libjni.so");
}
protected static native  String getstr(String vs);
protected static native  String getnames(String vs);

public static void main(String[] args) {
System.out.println(getstr(""));
}
}


编译上述java文件。到生成的class的根目录,也就是com目录下,运行:javah com.mobile.register.Starter后,会在当前的目录下生成一个com_mobile_register_Starter.h头文件。


内容如下:

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

#ifndef _Included_com_mobile_register_Starter
#define _Included_com_mobile_register_Starter
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_mobile_register_Starter
* Method:getstr
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_mobile_register_Starter_getstr
(JNIEnv *, jclass, jstring);

/*
* Class: com_mobile_register_Starter
* Method:getnames
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_mobile_register_Starter_getnames
(JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif


新建一个.c文件,此处叫jni.c。其内容如下:

#include "com_mobile_register_Starter.h"

JNIEXPORT jstring JNICALL Java_com_mobile_register_Starter_getstr(JNIEnv *env, jclass jc, jstring js){
char result[]="abc"; 
return (*env)->NewStringUTF(env,result); 
}

/*
* Class: com_mobile_register_Starter
* Method:getnames
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_mobile_register_Starter_getnames(JNIEnv *env, jclass jc, jstring js){
char result[]="names"; 
return (*env)->NewStringUTF(env,result); 
}


将jni.c编译成.o文件:

gcc -fPIC -I/usr/local/jdk/include -I/usr/local/jdk/include/linux -c jni.c

/usr/local/jdk/include是jni.h头文件所在的路径
/usr/local/jdk/include/linux是jni_md.h所在的路径
64位系统需要使用-fPIC 这个参数


将.o文件链接成.so库文件

gcc -shared jni.o -o libjni.so


注:和windows下不同,linux的库文件必须是以libxxx.so形式命令的(或者 libxxx.so.y,y是版本号),lib前缀是为了系统能够识别它,xxx是java代码System.load(“xxx”);中引用库的名字。


将java代码中的路径换成绝对路径如下:

package com.mobile.register;

public class Starter {
static
{
System.load("/usr/work/cert/out/production/create509/libjni.so");
}

protected static native  String getstr(String vs);
protected static native  String getnames(String vs);

public static void main(String[] args) {
System.out.println(getstr(""));
}
}


输入如下结果:

abc


本文永久更新地址:

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《java jni开发》技术文章,《java jni开发》详细使用和说明,有时《java jni开发》可能不完善、敬请谅解!如果《java jni开发》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片