1,建立测试类,注意英文注释部分,用汉语直接编译会乱码
public class Hello { //native method is used for call other language procedure //if use chinese here then Compile would be gibberish public native void printHello(); static{ System.loadLibrary("HelloWorld");//加载生成的dll文件 } public static void main(String[] args) { new Hello().printHello(); } }
2,编译
javac Hello.java
3,生成.h文件(.h文件为C语言的头文件,内含函数声明、宏定义、结构体定义等内容)
javah Hello
.h文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Hello */
#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Hello
* Method: printHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_Hello_printHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4,编写HelloWorld.c文件(.c则为C语言的源文件,内含函数实现,变量定义等内容)
#include "jni.h"
#include "Hello.h"
//#include other headers
JNIEXPORT void JNICALL Java_Hello_printHello(JNIEnv *env, jobject obj)
{
printf("Hello world!
");
return;
}
注意,jni.h为%JAVA_HOME%includejni.h,Hello.h是第3步生成的,Java_Hello_printHello中的Java_Hello_不能去掉
5,下载安装mingw, 并将其安装目录配置到系统环境变量
mingw_64位最新下载地址:mingw_64位最新版下载地址
该软件的作用是在windows系统使用gcc和g++命令,对c文件和c++文件进行编译,生成.o文件, 进而生成.dll文件。64位的只能生成64位的dll文件。若要生成32位的dll文件,请下载32位的mingw.
mingw_32最新版下载地址:mingw_32位最新版下载地址
安装完后将{minw安装目录}mingw64in放到path即可。
安装成功截图:
6,成功.o文件(注意HelloWorld.c的路径和mingw/bin的关系,要保证对应能找到对方)
gcc -c -I"%JAVA_HOME%include" -I"%JAVA_HOME%includewin32" HelloWorld.c
7,生成.dll文件(注意事项同6)
gcc -Wl,--add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.o
8,执行java命令, 验证是否成功。
java Hello
输出Hello World,成功!
示例项目下载:forDll.rar(内含项目、.c.h.o.dll所有文件)
插件mingw64位本人百度云下载:https://pan.baidu.com/s/12XGJYTYEJp0-bORB_UfRNA