1,创建java文件
class HelloNative{
public static native void hello();
}
2,javac -h . HelloNative.java
生成HelloNative.h文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_hello
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
3 ,创建HelloNative.c文件
#include "HelloNative.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloNative_hello(JNIEnv* env, jclass cl){
printf("Hello Native World!\n");
}
4 ,gcc -Wl,–add-stdcall-alias -shared -o HelloNative.dll HelloNative.c生成dll文件
5,System.load()加载dll,调用本地方法
public class HelloNative {
public static native void hello();
public static void main(String[] args) {
hello();
}
static {
try {
System.load("D:\\Projects\\app\\HelloNative.dll");
System.out.println("ok");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
}
运行
D:\Software\Java\jdk1.8.0_201\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:9585,suspend=y,server=n -javaagent:D:\Software\IDEA\plugins\java\lib\rt\debugger-agent.jar -agentpath:C:\Users\H\AppData\Local\Temp\memory_agent.dll= -Dfile.encoding=UTF-8 -classpath D:\Software\Java\jdk1.8.0_201\jre\lib\charsets.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\deploy.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\javaws.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jce.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jfr.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jsse.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\management-agent.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\plugin.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\resources.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\Projects\app\out\production\app;D:\Software\IDEA\lib\idea_rt.jar HelloNative
Connected to the target VM, address: '127.0.0.1:9585', transport: 'socket'
ok
Disconnected from the target VM, address: '127.0.0.1:9585', transport: 'socket'
Hello Native World!
Process finished with exit code 0
依赖文件 jni_md.h jni.h jdk目录下include目录
c编译器使用mingw64 版本gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)