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

linux上简单的JNI入门实例

2015-11-18 01:09 627 查看
第一步:创建,编译java类UserService

[root@vmhostd jni]# mkdir -p org/test

[root@vmhostd jni]# vi org/test/UserService.java

[root@vmhostd jni]# javac org/test/UserService.java

[root@vmhostd jni]# ll org/test

total 8

-rw-r--r--. 1 root root 832 Nov  7 03:20 UserService.class

-rw-r--r--. 1 root root 380 Nov  7 03:18 UserService.java

UserService.java内容如下:

package org.test;

public class UserService {

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

public native static void addUser(String name);
public native static String getUser(String name);

public static void main(String[] args){
UserService us = new UserService();

us.addUser("Jona");

String name = us.getUser("Jona");

System.out.println("NAME:" + name);
}
}


第二步:生成头文件org_test_UserService.h后面的C程序使用

[root@vmhostd jni]# javah org.test.UserService
[root@vmhostd jni]# ll
drwxr-xr-x. 3 root root 4096 Nov  7 03:12 org
-rw-r--r--. 1 root root  666 Nov  7 03:24 org_test_UserService.h


第三步:创建编译并打包native的C程序

[root@vmhostd jni]# vi user.c
[root@vmhostd jni]# gcc -fPIC -D_REENTRANT -I/usr/java/jdk1.8.0_65/include -I/usr/java/jdk1.8.0_65/include/linux -c user.c
[root@vmhostd jni]# gcc -shared user.o -o libuser.so
[root@vmhostd jni]# ll
-rwxr-xr-x. 1 root root 4463 Nov  7 03:41 libuser.so
drwxr-xr-x. 3 root root 4096 Nov  7 03:12 org
-rw-r--r--. 1 root root  666 Nov  7 03:24 org_test_UserService.h
-rw-r--r--. 1 root root  465 Nov  7 03:40 user.c
-rw-r--r--. 1 root root 1492 Nov  7 03:40 user.o


user.c的内容如下:

#include "org_test_UserService.h"

char *name;

JNIEXPORT void JNICALL Java_org_test_UserService_addUser(JNIEnv *env, jclass jc,jstring username)
{
name = (*env)->GetStringUTFChars(env,username,0);
fprintf("user added:%s\n",name);
}

JNIEXPORT jstring JNICALL Java_org_test_UserService_getUser(JNIEnv *env, jclass jc,jstring username)
{
name = (*env)->GetStringUTFChars(env,username,0);
fprintf("user get:%s\n",name);
return (*env)->NewStringUTF(env,name);
}


第四步:配置环境运行

[root@vmhostd jni]# export LD_LIBRARY_PATH=/root/workspace/jni
<pre name="code" class="cpp">[root@vmhostd jni]# java org.test.UserService
NAME:Jona


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