Java JNI调用本地方法1(调用C++方法)

server/2024/10/25 20:26:08/

一、基础概念
1、JNI(Java Native interface):sun公司提供的JNI是Java平台的一个功能强大的接口,实现java和操作系统本地代码的相互调用功能,系统本地代码通常是由其他语言编写的,如C++。

二、JNI使用步骤
1、定义一个Java的native方法。
2、使用jdk的javah工具,生成包含native方法类的C/C++头文件(.h)。
3、按照生成的C/C++头文件(.h),来写C/C++源文件(.cpp)。
4、编译C/C++源文件生成动态链接库(DLL)。
5、将DLL文件放到系统环境变量PATH配置的路径下(如:jdk的bin或者自己新增一个路径专门放DLL文件)。
6、Java加载DLL文件,调用native方法。

三、完整过程示例
1、创建Java项目,编写一个带有native的类

java">package cn.test;
public class TestJni {public native void sayHello();
}

2、编译上java文件,通过javah生成C++头文件
(1)、点击compile,编译项目,生成class文件
在这里插入图片描述
(2)、进入编译项目的target/classes目录下,通过javah生成头文件
命令:javah cn.test.TestJni
说明:TestJni指的是TestJni.class文件,不是TestJni.java文件,一定要先编译。
如果还有路径层级,使用.连接。如: cn.zw.test.TestJni
在这里插入图片描述
(3)、查看头文件
在这里插入图片描述
3、创建C++的动态DLL项目,生成DLL文件
(1)、下载Visual Studio 2022工具(其他版本也行,能编译运行C++项目即可),如下标
在这里插入图片描述
(2)、新建项目,选择DLL动态链接库,点击下一步
在这里插入图片描述
(3)、配置项目如下图,项目名称无需一致,点击创建
在这里插入图片描述


http://www.ppmy.cn/server/3929.html

相关文章

Redis入门到通关之GEO实现附近的人功能

文章目录 ☃️概述☃️命令演示☃️API将数据库表中的数据导入到redis中去☃️实现附近功能 ☃️概述 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。…

Scikit-Learn 支持向量机分类

Scikit-Learn 支持向量机分类 1、支持向量机(SVM)1.1、SVM概述1.2、SVM原理1.3、SVM的损失函数 1、支持向量机(SVM) 1.1、SVM概述 在机器学习中,支持向量机(Support Vector Machine,SVM&#x…

C++模板特化

模板具体化又被称为特化,有些朋友比较容易把具体化和实例化混淆,这里对两个概念做出对比解释: 模板实例化:编译器将模板转化为函数或者类型的过程;模板特化:修改或覆盖默认的模板实例化过程; …

使用 Flask 和 Flask-Login 构建用户认证的 Web 应用程序

在本篇技术博客中,我们将学习如何使用 Flask 框架和 Flask-Login 扩展构建一个具有用户认证功能的简单 Web 应用程序。我们将从创建 Flask 应用实例开始,然后逐步添加用户认证功能。 1. 安装依赖库 首先,确保您已经安装了 Flask、Flask-PyM…

【LeetCode热题100】【二分查找】搜索插入位置

题目链接:35. 搜索插入位置 - 力扣(LeetCode) 要在一个有序数组里面查找一个元素的位置,就是要找第一个大于等于目标元素的位置,每次和中间位置元素进行比较,然后确定下一次的查找范围是在左半部分还是右半…

构建Python中的分布式日志系统:ELK与Fluentd的结合

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代软件开发中,日志系统是至关重要的组成部分。它们不仅用于故障排查和性能监…

hot100-图论/岛屿问题

问题模板 为什么要将格子标记为【已遍历】—避免 重复遍历 (这是因为,网格结构本质上是一个「图」,我们可以把每个格子看成图中的结点,每个结点有向上下左右的四条边。在图中遍历时,自然可能遇到重复遍历结点。这时候&…

【YOLOv8改进[Backbone]】使用MobileNetV3助力YOLOv8网络结构轻量化并助力涨点

目录 一 MobileNetV3 1 面向块搜索的平台感知NAS和NetAdapt 2 反向残差和线性瓶颈 二 使用MobileNetV3助力YOLOv8 1 整体修改 ① 添加MobileNetV3.py文件 ② 修改ultralytics/nn/tasks.py文件 ③ 修改ultralytics/utils/torch_utils.py文件 2 配置文件 3 训练 其他 …