JNI入门示例

64 阅读1分钟

因为工作原因,需要在window环境下调试JNI相关接口。找了个入门程序进行学习,在此记录。

尝试下面这个示例前,你需要以下基础环境和软件:Windows,JDK 8,GCC(安装方法可参照:code.visualstudio.com/docs/cpp/co…)
demo来源

  1. 创建一个java文件HelloWorld.java
class HelloWorld{
    //声明本地方法
	private native void print();
        //程序入口
	public static void main(String[] args){
		new  HelloWorld().print();
	}
	
        //装载含有print()方法的本地库
	static{
            System.loadLibrary("HelloWorld");
	}
}
  1. 编译HelloWorld类,生成HelloWorld.class
    javac HelloWorld.java
  2. 生成本地方法头文件HelloWorld.h javah HelloWorld.java

生成的头文件HelloWorld.h中,关键部分如下

JNIEXPORT void JNICALL Java_HelloWorld_print
  (JNIEnv *, jobject);

对应java代码中的本地方法。但java print()函数没有参数。这里第一个参数时只想JNIEnv结构的指针;第二个参数为HelloWorld对象自身,即this指针。 4. 编写本地方法实现代码HelloWorld.c文件,包含以下内容

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

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
	printf("Hello World!\n");	
}

  1. 使用gcc编译HelloWorld.c文件,并打包为HelloWorld.dll。其中“D:/Program Files/Java/jdk1.8.0_241”要替换为实际java安装路径。

gcc -I"D:/Program Files/Java/jdk1.8.0_241/include" -I"D:/Program Files/Java/jdk1.8.0_241/include/win32" HelloWorld.c -shared -o HelloWorld.dll

  1. 运行程序。执行java HelloWorld即可成功看到输出结果。

image.png