java native实践

  • 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文件

这里写图片描述


参考


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

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值