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. [luoguP1816] 忠诚(st表 || 线段树)

    传送门 其实我就是想练练 st表 本以为学了线段树可以省点事不学 st表 了 但是后缀数组中用 st表 貌似很方便 所以还是学了吧,反正也不难 ——代码 #include <cstdio> ...

  2. 【DEBUG】不能将参数 1 从“CString”转换为“const char *”

    1.  在vc6.0下用CString str;num = atoi(str);就可以顺利取到num: 但是同样代码拿到vs2008就报错,error C2664: "atoi": ...

  3. [bzoj1634][Usaco2007 Jan]Protecting the Flowers 护花_贪心

    Protecting the Flowers 护花 bzoj-1634 Usaco-2007 Jan 题目大意:n头牛,每头牛有两个参数t和atk.表示弄走这头牛需要2*t秒,这头牛每秒会啃食atk朵 ...

  4. Loadrunner | 录制脚本时弹不出IE的解决办法

    Loadrunner在录制脚本的时候有时候会遇到弹不出IE的问题,那怎么解决呢?别急,按照以下几个步骤操作,一般就可以解决这个问题. 1. IE浏览器取消勾选[启用第三方浏览器扩展] 启动IE,从[工 ...

  5. UVA 11762 - Race to 1(概率)

    UVA 11762 - Race to 1 题意:给定一个n,每次随即选择一个n以内的质数,假设不是质因子,就保持不变,假设是的话.就把n除掉该因子,问n变成1的次数的期望值 思路:tot为总的质数. ...

  6. StringIndexOutOfBoundsException

    <span style="font-family:Microsoft YaHei;font-size:14px;">public class StringIndexBo ...

  7. mysql-5.5 for linux源码安装

    mysql-5.5 for linux源码安装 1.使用Yum安装依赖软件包 # yum install -y gcc gcc-c++ gcc-g77 autoconf automake bison  ...

  8. C#上移,下移TreeView中的树节点顺序

    C#上移,下移TreeView中的树节点顺序 2009-08-12 20:10 1494人阅读 评论(2) 收藏 举报 c#buttonobjectnullstring C#中,通过单击上移,下移按钮 ...

  9. 803E

    dp dp[i][j]表示到了i赢和输的差为j 如果这位是?向dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1]转移,如果是W向dp[i-1][j-1]转移,如果是L向dp[i- ...

  10. 地图使用-----MapKit介绍

    一.MapKit介绍 1.苹果自带地图功能(高德地图),可以提供地图展示,查询,定位,导航等功能.使用MapKit框架实现地图功能,MapKit框架中所有数据类型的前缀都是MK 2.MapKit有一个 ...