因为工作原因,需要在window环境下调试JNI相关接口。找了个入门程序进行学习,在此记录。
尝试下面这个示例前,你需要以下基础环境和软件:Windows,JDK 8,GCC(安装方法可参照:code.visualstudio.com/docs/cpp/co…)
demo来源
- 创建一个java文件HelloWorld.java
class HelloWorld{
//声明本地方法
private native void print();
//程序入口
public static void main(String[] args){
new HelloWorld().print();
}
//装载含有print()方法的本地库
static{
System.loadLibrary("HelloWorld");
}
}
- 编译HelloWorld类,生成HelloWorld.class
javac HelloWorld.java - 生成本地方法头文件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");
}
- 使用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
- 运行程序。执行
java HelloWorld即可成功看到输出结果。