- native 方法作为java扩展,java对底层实现有限,可以通过调用c/c++来实现一些扩展。
- native方法 显然与底层相关,与平台相关。
- java中native方法只有声明,没有具体的定义。
.java, 加载一个动态库,然后调用其中的add方法
public class NativeDemo{
public native int add(int a, int b);
static{
System.loadLibrary("mymath");
}
public static void main(String[] args){
int c = new NativeDemo().add(1, 2);
System.out.println(c);
}
}
生成class文件
javac NativeDemo.java
生成头文件 NativeDemo.h
javah -jni NativeDemo
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeDemo */
#ifndef _Included_NativeDemo
#define _Included_NativeDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeDemo
* Method: add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_NativeDemo_add
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
接着需要实现 其中的方法,windows vs2013生成
注意平台 64-bit的JDK的只能加载64-bit的dll(动态库 ,linux上是.so), 32-bit的只能是32-bit的dll
vs2013的vc include目录下 从jdk中加入jni.h , win32/jni_md.h , win32/jawt_md.h, 3个头文件
vs2013新建工程
- dll
- 导出符号
NativeDemo.h 如上
NativeDemo.cpp
#include <jni.h>
#include "NativeDemo.h"
JNIEXPORT jint JNICALL Java_NativeDemo_add
(JNIEnv *, jobject, jint c, jint d){
return c + d;
}
要生成64-bit的dll, 直接生成解决方案,即可字Debug文件中找到dll文件
将dll文件与 NativeDemo.h 放到一起,然后运行java文件
参考
vs构建64-bit的dll
https://jingyan.baidu.com/article/67508eb43f91869cca1ce49c.htmljava中native方法的使用
https://www.cnblogs.com/yxysuanfa/p/7253560.html
Linux平台实践,Makefile实现
// TODO