一、含有native修饰方法的Java类
public class HelloWorld {
static {
//加载dll文件,参数使用生成的dll文件的绝对路径
System.load(System.getProperty("user.dir")+"\\src\\com\\native_test\\com_native_test_HelloWorld.dll");
}
public static native void printByCPP();
public static void main(String[] args) {
//调用native关键字修饰的方法
printByCPP();
}
}
二、使用Javac -h生成.class和.h文件
javac HelloWorld.java -h .
执行后生成.class和.h文件
注:“-h”后面有一个“."
三、实现.h文件中的方法
com_native_test_HelloWorld.h文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_native_test_HelloWorld */
#ifndef _Included_com_native_test_HelloWorld
#define _Included_com_native_test_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_native_test_HelloWorld
* Method: printByCPP
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_native_1test_HelloWorld_printByCPP
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
创建com_native_test_HelloWorld.cpp实现com_native_test_HelloWorld.h
#include<stdio.h>
#include"com_native_test_HelloWorld.h"
JNIEXPORT void JNICALL Java_com_native_1test_HelloWorld_printByCPP(JNIEnv *, jclass)
{
printf("%s", "cpp says HelloWorld!");
}
四、使用gcc将上面的文件生成动态链接库(.dll文件)
输入gcc -v检查本机是否拥有环境
然后输入以下命令生成动态链接库
gcc -I "JDK的include路径" -I "JDK的include\win32"路径 -shared -o 生成文件名.dll 源文件名.cpp
gcc -I "D:\Develop\JAVA\JDK\jdk-17\include" -I "D:\Develop\JAVA\JDK\jdk-17\include\win32" -shared -o com_native_test_HelloWorld.dll com_native_test_HelloWorld.cpp
运行结果