Java 使用Native文件,一般分解为下面几个步骤:

  1. 在Java代码中使用native关键字声明一个本地方法
  2. 运行javah,获得包含该方法声明的C语言头文件(使用jni编程中的C函数名通常是相关于Java方法有一定的命名规则的,稍后会介绍,我们使用javah来帮助我们获得该方法名)
  3. 用C语言或C++实现我们所需要的功能
  4. 生成共享库文件,共享库文件可以是windows风格的.dll文件,也可以是UNIX风格的.so文件
  5. 为了确保虚拟机在第一次使用该类之前就会装载这个库,使用静态初始化块来加载

操作步骤:

1.CMD 切换到目录

cd D:\Works\Android\WorkspaceUnify\rsPolylabel\bin
D:

2.编译头文件

javah -jni -classpath . -d ./jni rsPolylabel.Polylabel

结果:生成h文件 rsPolylabel_Polylabel.h 到jni文件夹

3.头文件代码描述

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class rsPolylabel_Polylabel */ #ifndef _Included_rsPolylabel_Polylabel
#define _Included_rsPolylabel_Polylabel
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: rsPolylabel_Polylabel
* Method: helloWishchinJni
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_rsPolylabel_Polylabel_helloWishchinJni
(JNIEnv *, jclass); #ifdef __cplusplus
}
#endif
#endif

5.利用Vs生成工程

使用VS建立一个Dll工程,根据头文件编写相应的CPP文件,在包含目录中添加目录:

C:\Program Files\Java\jdk1.8.0_152\include

C:\Program Files\Java\jdk1.8.0_152\include

7.载入动态库

网上的方法,把储存dll文件的目录加入到系统目录Path,然并卵!!!

在Eclipse程序中,运行System.out.println( System.getProperty("java.library.path"));

此行运行完成,输出目录

D:\Works\Android\WorkspaceUnify\rsPolylabel\lib\x64;

D:\Works\Android\WorkspaceUnify\rsPolylabel\lib\hdf5

因此把dll文件放入 lib\x64 目录,载入成功。

6.编写代码

在CPP文件中添加头文件包含和JNI包含

#include <jni.h>
/* Header for class rsPolylabel_Polylabel */
#include "rsPolylabel_Polylabel.h"

此后按照一般的方法生成动态库即可

7.引入动态库

测试成功!

JAVA 构建使用 Native 库的更多相关文章

  1. 多平台Native库打入JAR包发布实战

    1.前言 在开发Java应用的过程中,经常会遇到需要使用C/C++等Native语言编译的动态库或静态库,在这些情况下往往需要将预先编译好的各平台库文件与JAR包一同发布,鉴于简洁的原则,我们可能会希 ...

  2. java基础-关键字-native

     一. 什么是Native Method    简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由 ...

  3. java中的native方法和修饰符(转)

    Java中的native修饰符 今天偶然看代码,发现别人有这样写的方法,并且jar里面有几个dll文件,比较奇怪,于是把代码打开,发现如下写法. public native String GSMMod ...

  4. Java中的native方法

    博客引用地址:Java中的native方法 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地 ...

  5. Java中的native关键字与JNI

    一.先说一下大致的意思: jdk提供的类库源代码中有一些方法没有实现,这些方法前有native关键字,如object类中的 : native Object clone() throws CloneNo ...

  6. 25个Java机器学习工具和库

    本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法.这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用.Weka包括一系列的工具,如数据预 ...

  7. Java调用dll动态库

    最近项目里使用java调用dll动态库,因此研究了一下这方面的东西. 使用的工具包如下 <dependency> <groupId>net.java.dev.jna</g ...

  8. 转:25个Java机器学习工具和库

    转自:http://www.cnblogs.com/data2value/p/5419864.html 本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习 ...

  9. 浅析Java中的native关键字

    浅析Java中的native关键字 native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进 ...

随机推荐

  1. 4 pandas模块,Series类

      对gtx图像进行操作,使用numpy知识 如果让gtx这张图片在竖直方向上进行颠倒.   如果让gtx这张图片左右颠倒呢?   如果水平和竖直方向都要颠倒呢?   如果需要将gtx的颜色改变一下呢 ...

  2. Java 下实现Cache

    最近在做Spring的项目,想做一个缓存,访问数据库,定期来做数据更新 要实现两个功能 可以通过http请求来立刻刷新缓存 缓存可以通过自己配置的时间间隔来定期刷新 通过Controller来做 因为 ...

  3. hdu2008 数值统计【C++】

    数值统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. hdu2001 计算两点间的距离【C++】

    计算两点间的距离 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. Pillow 模块~Python图像处理

    什么是验证码? 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自 ...

  6. BUPT2017 springtraining(16) #3 ——搜索与动态规划

    题目在这里啊 A.最长上升子序列,范围很小所以写了简单的O(n^2)算法 #include <iostream> #define rep(i, j, k) for(int i = j;i ...

  7. nyoj_524_A-B Problem_201312012035

    A-B Problem 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧. ...

  8. StackOverflow 这么大,它的架构是怎么样的

    原文地 [伯乐在线补充]:Nick Craver 是 StackOverflow 的软件工程师 & 网站可靠性工程师. 这是「解密 Stack Overflow 架构」系列的第一篇,本系列会有 ...

  9. springMVC入门笔记

    目录 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 基本数据类型的获取: 如果表单域 ...

  10. 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。

    本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并 ...