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 918C/917A - The Monster

    传送门:http://codeforces.com/contest/918/problem/C 一个括弧串由字符‘(’和‘)’组成.一个正确的串可被递归地定义,定义如下: ①空串e是一个正确的串: ② ...

  2. mac上的svn命令

    Mac 终端添加代码到SVN从SVN拉取代码步骤:1.cd /Users/指定路径(本地路径)2.svn checkout https://xxx.xxx.xx/svn/project(服务器路径) ...

  3. scp相关命令总结

    scp 跨机远程拷贝scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.当你服务器硬盘 ...

  4. [国家集训队2012]JZPFAR

    [国家集训队2012]JZPFAR 题目 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离( ...

  5. debug jdk source can't watch variable what it is

    https://www.cnblogs.com/shuaiqing/p/7525841.html https://stackoverflow.com/questions/18255474/debug- ...

  6. 络谷 P1363 幻想迷宫

    P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:mo ...

  7. MySql解压版使用

    1.解压 2.配置环境变量 3.新建空目录data,修改ini配置文件,修改basedir和datadir 4.管理员运行cmd,进入bin目录 5.mysql -install,如果提示错误,先my ...

  8. 最小堆min_stack

    class MinStack {public: void push(int x) { ele.push(x); if(min.empty()||x<=min.top())    // in or ...

  9. jsencrypt代码分析

    jsencrypt代码分析——openssl的rsa加密解密在js的实现   在js上做rsa,感觉jsencrypt这个是封装的比较好的,但用起来还是遇到了些坑,所以踩进代码里填填坑- 项目在这里  ...

  10. oc41--SEL

    // // main.m // 代理的时候用. /* SEL类型: 代表方法的签名,在类中的方法列表中存储着该签名与该方法对应的关系,类的方法列表存储在类对象中, 每个方法都有一个与之对应的sel类型 ...