Hello World之JNI版 (Windows环境)

Hello World之JNI版 (Windows环境)

雨水 2013年5月3日 转载注明出处:http://blog.csdn.net/gobitan

摘要

在Java的某些开发中可能会用到C/C++语言的一些库,尤其是语音和视频编解码领域,那么此时JNI就派上用场了。这里以Hello World来简单介绍下Windows环境下JNI开发。

 

第一步:编写Java的Native接口

先写一个类,该类定义了调用C的接口。具体如下:

public class HelloJNI {

	static {
		System.loadLibrary("HelloJNI");
	}
	
	private native void sayHello();
	
	public static void main(String[] args) {
		new HelloJNI().sayHello();
	}

}
其中:

static部分是加载C库。sayHello()是Java的native接口。其他不过多解释。

用javac HelloJNI.java编译出HelloJNI.class文件备一下步用。

 

第二步:生成C头文件

执行如下命令,根据定义了native接口的Java类生成JNI头文件。

javah HelloJNI

该命令将生成如下C的头文件,其中包含了一个方法如下:

JNIEXPORT void JNICALLJava_HelloJNI_sayHello

  (JNIEnv *, jobject);

注:最后这个头文件是不必要的。

 

第三步:编写C源文件

该C源文件实现了上一步中的接口,具体如下:

#include <jni.h>
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloJNI_sayHello
  (JNIEnv *env, jobject object)
{
	printf("Hello World, JNI!");

	return ;
}



第四步:编译C文件

在Windows环境下,需要将其编译成DLL库(Linux下对应为so库)。

网上有很多关于它的编译方法,很多都是基于Cygwin下的老版本的gcc,结果一些参数不支持,会报错。经过尝试和网上搜索,后面找到可以通过MinGW来编译。

先到MinGW官网http://www.mingw.org/去下载一个安装上,假设安装至C盘根目录,然后将C:\MinGW\bin加入到系统的Path环境变量中。

执行如下命令编译:

gcc -Wl,--add-stdcall-alias-I"C:\Program Files\Java\jdk1.6.0_27\include" -I"C:\ProgramFiles\Java\jdk1.6.0_27\include\win32" -shared -o HelloJNI.dll HelloJNI.c

 

这里需要将java的头文件路径替换为你本地的。执行成功后将在当前目录生成HelloJNI.dll文件。

第五步:最后运行

java -Djava.library.path=. HelloJNI

这里假定Dll的位置跟HelloJNI.class在同一目录,如果不在,可以通过java.library.path参数来设置。

参考资料:

1. http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gobitan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值