JAVA 构建使用 Native 库
Java 使用Native文件,一般分解为下面几个步骤:
- 在Java代码中使用native关键字声明一个本地方法
- 运行javah,获得包含该方法声明的C语言头文件(使用jni编程中的C函数名通常是相关于Java方法有一定的命名规则的,稍后会介绍,我们使用javah来帮助我们获得该方法名)
- 用C语言或C++实现我们所需要的功能
- 生成共享库文件,共享库文件可以是windows风格的.dll文件,也可以是UNIX风格的.so文件
- 为了确保虚拟机在第一次使用该类之前就会装载这个库,使用静态初始化块来加载
操作步骤:
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 库相关推荐
- 云效 Flow——Java构建并通过云效上传二方库到 Maven 私有仓库
解决方案 当用户开通了 Maven 私有仓库服务后,云效会为用户生成两个私有仓库,一个用于存放 release 版本的二方库,一个用于存储 SNAPSHOT 版本的二方库. Release 仓库地址示 ...
- 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )
文章目录 一.导入 Oboe 库 二.使用预构建的二进制库和头文件 三.编译 Oboe 源代码 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Starte ...
- 2019史上最全java面试题题库大全800题含答案
2019史上最全java面试题题库大全800题含答案 1. meta标签的作用是什么 2. ReenTrantLock可重入锁(和synchronized的区别)总结 3. Spring中的自动装配有 ...
- 2019史上最全java面试题题库大全800题含答案(面试宝典)
2019史上最全java面试题题库大全800题含答案(面试宝典) 1. meta标签的作用是什么 2. ReenTrantLock可重入锁(和synchronized的区别)总结 3. Spring中 ...
- 2022史上最全java面试题题库大全800题含答案
2022史上最全java面试题题库大全800题含答案 1. meta标签的作用是什么 2. ReenTrantLock可重入锁(和synchronized的区别)总结 3. Spring中的自动装配有 ...
- 更改hadoop native库文件后datanode故障
hadoop是用cloudra的官方yum源安装的,服务器是CentOS6.3 64位操作系统,自己写的mapreduce执行的时候hadoop会提示以下错误: WARN util.NativeCod ...
- 25 个 Java 机器学习工具和库
本列表总结了25个Java机器学习工具&库: Weka集成了数据挖掘工作的机器学习算法.这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用.Weka包括一系列的工具,如数据预处理. ...
- Java构建工具, ZeroC ICE, word2vec
https://antkillerfarm.github.io/ Java构建工具 构建工具的意义在于,提供一种独立于IDE的软件构建方式.而且通常来说,构建工具更适合特大项目的构建.比如,即使是以功 ...
- Java日期及时间库插件 -- Joda Time.
转载自 Java日期及时间库插件 -- Joda Time. 来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用 ...
最新文章
- BZOJ 4595 SHOI2015 激光发生器 射线,线段,偏转
- apache httpd 1
- 厚积薄发!他读博前三年零文章,后期发力产出11篇一作,现任985高校博导
- 查看安装的cuda和cudnn的版本号
- Java 什么叫做实例化
- 设置linux防火墙服务不开机启动,Linux关闭防火墙并设置开机启动/不启动
- 二级C语言程序设计备考方法
- c# mysql 中文,c#操作mysql中文乱码的解决方案_c#应用
- 【caffe】Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERRO
- ALGO-146算法训练 4-2找公倍数
- 1e9个兵临城下(容斥原理)
- 使用 profile 进行python代码性能分析
- 应届生面试技巧心得及选择工作走向的分析
- 何炅机器人对话_何炅和黄磊的一段对话,暗藏他们对人生的沉淀,听懂后受益一生...
- Shipyard远程API
- 全民农场服务器维护上不去,全民农场签到页面空白解决方法
- 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
- 三维地图(3D地图)离线地图开发
- K_A12_004 基于STM32等单片机采集人体红外感应(HC-SR501)模块串口与OLED0.96双显示
- 解决:远程连接mysql:报异常,1044 - Access denied for user ‘root‘@‘%‘ to database ‘xxxxxx‘
热门文章
- 亚马逊 OpenJDK 发行版 Corretto GA
- Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记
- 《信息检索》第8讲 毕业论文学习指导(资源及预习材料)
- php基本功之_get(),_set()的用法
- 对正在运行的mysql进行监控
- 2012年度IT博客大赛50强报道:马博峰
- jackson 实体转json json字符串转实体
- 如何理解java采用Unicode编码
- Day-10: 错误、调试和测试
- Python之路【第二篇】:Python基础(一)