linux上简单的JNI入门实例

原创 2015年11月18日 01:09:23

第一步:创建,编译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




版权声明:本文为博主原创文章,未经博主允许不得转载。

(Linux平台)在Android中调用JNI

(需要使用NDK工具编译生成.so文件,所以请先下载NDK, 附地址: http://wear.techbrood.com/tools/sdk/ndk/index.html ,请选择对应平台下载) ...
  • u013403478
  • u013403478
  • 2016年07月29日 20:13
  • 792

JNI介绍及简单实例

JNI概念 JNI是Java Native Interface的缩写,中文为JAVA本地调用。 使用JNI, 可以调用用其他语言写成的库或程序, 尤其是C和C++。 好了,概念性的内容就不多介绍...
  • oscar999
  • oscar999
  • 2012年08月22日 14:08
  • 5083

一个简单的Linux驱动示例

本文参考百度文库“linux驱动开发入门”点击打开链接和转载博文:点击打开链接。 一、基本知识                 Linux设备驱动分为:字符设备、块设备和网络设备。原理图如下: ...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年04月05日 19:55
  • 4342

最简单的linux内核模块实例

新建一个Hello文件夹,然后建两个文件,一个是Hello.c,一个是Makefile Hello.c的内容如下 #include /* Needed by all module...
  • baqiuxiao
  • baqiuxiao
  • 2013年04月16日 19:55
  • 1039

JNI简单入门实例

jni简单实例 1.编写带有native声明的方法的java类 新建HelloWorld.java class HelloWorld{     public native ...
  • spyiu
  • spyiu
  • 2012年11月14日 14:48
  • 600

Linux 简单入门

学习慕课网的《Linux达人养成计划I》教程的笔记。 本教程Linux系统的基础知识,分区和挂载,Linux常用的命令,还有基础的shell语法。shell的介绍shell编程里有详细的介绍。 L...
  • wyBluewind
  • wyBluewind
  • 2015年10月24日 18:25
  • 751

一个简单的linux下网络程序实例-网络编程入门

系统:fedora core 5服务器端程序:/* server */#include stdio.h>#include sys/types.h>#include netinet/in.h>#incl...
  • manio
  • manio
  • 2006年10月13日 15:10
  • 3747

C++入门简单实例

教授C++,如果还使用Hello World的例子作为入门,那就弱爆啦!它只能告诉你不要用printf,要用cout。但是,为什么?这两个有什么区别?cout就代表了C++吗?我们还是整点有技术含量的...
  • aheroofeast
  • aheroofeast
  • 2011年10月09日 20:47
  • 12474

dubbo简单入门(helloworld例子)

Dubbo现在支持的有三种方式: 1.multicast; 2.zookeeper; 3.redis 下面的Demo使用的是multicast方式。提供者项目结构: 消...
  • qq_16055765
  • qq_16055765
  • 2016年05月31日 09:56
  • 4195

Python爬虫的简单入门及实用的实例(1)

一.PYthon爬虫的介绍及应用       利用爬虫可以进行数据挖掘,比如可以爬取别人的网页,收集有用的数据进行整合和划分,简单的就是用程序爬取网页上的所有图片并保存在自己新建的文件夹内,还有可以爬...
  • HOT_and_COOl
  • HOT_and_COOl
  • 2017年04月17日 16:17
  • 1190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux上简单的JNI入门实例
举报原因:
原因补充:

(最多只允许输入30个字)