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. 【Codeforces 1114C】Trailing Loves (or L'oeufs?)

    [链接] 我是链接,点我呀:) [题意] 问你n!的b进制下末尾的0的个数 [题解] 证明:https://blog.csdn.net/qq_40679299/article/details/8116 ...

  2. 【codeforces 508A】Pasha and Pixels

    [题目链接]:http://codeforces.com/contest/508/problem/A [题意] 让你在一个n*m的方格上给方格染色; 顺序给出染色的k个格子 如果在某一时刻 有一个2* ...

  3. Java基础之构造方法及其应用

    构造方法是一种特殊的方法,它是一个与类同名且无返回值类型(连void也不能有)的方法. 对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化. 当类实例化一个对象时会自动调用构造方法.构造方 ...

  4. 暑假集训D19总结

    考试 日常爆炸 T1   辣么简单,淼到极致的DP,我竟然打挂了= =,打挂了= =,只拿了75分啊,不能接受啊= = T2   随便找找规律,瞎XX模拟一下就能A的鬼东西,我竟然打了个暴力+Floy ...

  5. [bzoj1704][Usaco2007 Mar]Face The Right Way 自动转身机_贪心

    Face The Right Way 自动转身机 bzoj-1704 Usaco-2007 Mar 题目大意:不想描述题意系列++... ...题目链接 注释:略. 想法:我们直接枚举k,然后从左往右 ...

  6. Swift: 一句话获取虚拟机上APP所在的目录

    在XCode6上,虚拟机的App的存放位置发生了变化,通过下面语句,我们可以立即获得其所在的位置: println(NSTemporaryDirectory())

  7. PHP array_diff_key()

    定义和用法 array_diff_key() 函数返回一个数组,该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键. 语法 array_diff_key(array1,array2,ar ...

  8. 【转】php ob_start()、ob_end_flush和ob_end_clean()多级缓冲

    原文:https://my.oschina.net/CuZn/blog/68650 当php.ini配置文件中的  设置开启的时候,就相当于PHP已经打开了最顶层的 一级缓存 (等价于调用了一次 ob ...

  9. ORACLE11G设置IP訪问限制

    出于数据安全考虑,对oracle数据库的IP做一些限制,仅仅有固定的IP才干訪问. 改动$JAVA_HOME/NETWORK/ADMIN/sqlnet.ora文件 添加下面内容(红色表示凝视): #开 ...

  10. JS中split使用方法和数组中元素的删除

    JS中split使用方法和数组中元素的删除 JS中split使用方法 <script language="javascript"> function spli(){ d ...