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!\n");
return;
}
注意,jni.h為%JAVA_HOME%\include\jni.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安裝目錄}\mingw64\bin放到path即可。
安裝成功截圖:
6,成功.o文件(注意HelloWorld.c的路徑和mingw/bin的關系,要保證對應能找到對方)
gcc -c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" 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