java native实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26437925/article/details/80004498
  • 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文件

这里写图片描述

扫描二维码关注公众号,回复: 3707138 查看本文章

将dll文件与 NativeDemo.h 放到一起,然后运行java文件

这里写图片描述


参考


Linux平台实践,Makefile实现
// TODO

猜你喜欢

转载自blog.csdn.net/qq_26437925/article/details/80004498