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

你可能感兴趣的:(Hello World之JNI版 (Windows环境))