当前位置: 首页 > news >正文

Linux下Java通过JNI调用C++

以下为Demo流程

1.创建Java文件

public class HelloWord {// 声明本地方法public native void sayHello();static {// 加载本地库System.loadLibrary("hello");}public static void main(String[] args) {new HelloWord().sayHello();}
}

2.编译生成.h头文件

在HelloWord.java所在文件夹中打开终端,使用java命令编译.java文件,生成.h文件

 /data/home/UOS/IDEA/jdk/jdk21/bin/javac -h  .  HelloWord.java

 /data/home/UOS/IDEA/jdk/jdk21/bin/javac 为指定jdk所在路径,此时可在文件夹中生成.h文件

文件具体内容如下:

3.创建编写.c文件具体功能代码

4.生成libhello.so文件

完成3之后,在HelloWord.c所在文件夹下使用gcc编译生成.so文件,具体命令如下

gcc -shared -fPIC -o libhello.so -I/data/home/UOS/IDEA/jdk/jdk21/include -I/data/home/UOS/IDEA/jdk/jdk21/include/linux HelloWord.c

5.指定so文件路径,执行程序

可以使用Java命令指定java程序加载.so,我这里使用的是指定.so程序的全路径。


public class HelloWord {// 声明本地方法public native void sayHello();static {// 加载本地库//System.loadLibrary("hello");//System.loadLibrary(LIB_PATH);Path currentRelativePath = Paths.get("");String absolutePath = currentRelativePath.toAbsolutePath().toString();String libPath = Paths.get(absolutePath, "/src/main/java/hc/smart/jni/libhello.so").toString();System.out.println(libPath);System.load(libPath);}public static void main(String[] args) {new HelloWord().sayHello();}
}

执行后即可输出Hello. World

其中System.load(libPath);为加载全路径.so文件方法;若使用System.loadLibrary("hello");则需使用java命令配置.so。

若更改.c文件中的代码,则需重新编译生成.so文件,方可执行最新功能

后续将实现更复杂的功能

相关文章:

Linux下Java通过JNI调用C++

以下为Demo流程 1.创建Java文件 public class HelloWord {// 声明本地方法public native void sayHello();static {// 加载本地库System.loadLibrary("hello");}public static void main(String[] args) {new HelloWord().sayHello();} } 2.编译生成.h头文件 在H…...

解决:excel鼠标滚动幅度太大如何调节?

在excel里为什么滚动一次跳过很多行呢?很不方便。。。 1. 问题: 一开始单元格从第1行开始: 鼠标轻轻滚动一下后,直接跳到第4行: 鼠标在word和浏览器里都是好好的。在excel里为什么不是滚动一次跳过一行呢&#xff…...

Git和SVN有什么区别?

Git和SVN是两种流行的版本控制系统,它们在实现方式、使用场景和特性上存在一些关键区别: 分布式 vs 集中式: Git:是分布式的版本控制系统。每个开发者都有一个完整的仓库副本,可以离线工作,并在本地进行所有…...

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。 文章目录 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。1. 错…...

【ES6复习笔记】解构赋值(2)

介绍 解构赋值是一种非常方便的语法,可以让我们更简洁地从数组和对象中提取值,并且可以应用于很多实际开发场景中。 1. 数组的解构赋值 数组的解构赋值是按照一定模式从数组中提取值,然后对变量进行赋值。下面是一个例子: con…...

Dockerfile的用法

Dockerfile的用法 示例 `Dockerfile`使用 `Dockerfile` 创建 Docker 镜像`Dockerfile` 指令详解其他常用指令总结Dockerfile 是一个文本文件,包含了用于创建 Docker 镜像的一系列指令。这些指令描述了镜像的基础、所安装的软件、文件的复制、环境变量的设置以及其他配置。下面…...

Docker 安装mysql ,redis,nacos

一、Mysql 一、Docker安装Mysql 1、启动Docker 启动:sudo systemctl start dockerservice docker start 停止:systemctl stop docker 重启:systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 3.1.默认拉取最新版…...

Axure RP 11 详细保姆级安装教程(附安装包)

文章目录 初识:Axure RP 11 安装推荐配置 一、下载安装包 二、安装步骤 1.运行安装程序 2.安装向导,点击【Next】 3.许可协议,勾选【I accept the terms in the License Agreement】,然后点击【Next】 4.确认安装位置&…...

Java处理视频思路

1.首先实现断点续传功能。 断点续传实现思路: 前端对文件分块。前端使用多线程一块一块上传,上传前给服务端发一个消息校验该分块是否上传,如果已上传则不再上传。如果从该断点处断网了,下次上传时,前面的分块已经存在…...

攻防世界 robots

开启场景 根据提示访问/robots.txt,发现了 f1ag_1s_h3re.php 拼接访问 /f1ag_1s_h3re.php 发现了 flag cyberpeace{d8b7025ed93ed79d44f64e94f2527a17}...

DBeaver 咋手动配置sqlite 驱动

目录 1 问题2 下载 1 问题 离线安装了DBeaver 数据库软件,现在需要使用这个数据库打开sqlite 数据库,但是提示没有 驱动,那么我们就需要手动下载驱动,在这个软件里面导入 2 下载 https://repo1.maven.org/maven2/org/xerial/sql…...

RestTemplate关于https的使用详解

RestTemplate关于https的使用详解 一、restTemplate注入到bean里面。 Configuration public class RestTempleConfig {BeanPrimarypublic RestTemplate restTemplate() {return new RestTemplate();}/*** https 请求的 restTemplate* return* throws Exception*/Beanpublic R…...

消息中间件RabbitMQ和kafka

一、RabbitMQ 1、RabbitMQ如何保证消息不丢失 2、RabbitMQ如何解决重复消费的问题 3、RabbitMQ中的死信交换机 4、RabbitMQ消息堆积怎么解决 5、RabbitMQ的高可用机制 二、kafka 1、kafka如何保证消息不丢失和重复消费的问题 2、kafka如何保证消费的顺序性 3、kafka高可用机制…...

学习C++:标识符命名规则

标识符命名规则: 作用:C规定给标识符(变量、常量)命名时,有一套自己的规则 标识符不能是关键字 标识符只能由字母、数字、下划线组成 第一个字符必须为字母或下划线 标识符中字母区分大小写 (给标识符命…...

Bluetooth Spec【0】蓝牙核心架构

蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…...

AppInventor2 ClientSocketAI2Ext 拓展加强版 - 为App提供TCP客户端接入,可发送二进制数据

本文介绍App Inventor 2利用拓展实现TCP/IP协议接入功能,作为网络客户端连接TCP服务器,进行数据通信(发送/接收)。 // ClientSocketAI2Ext 拓展现状 // 原版拓展名称为:com.gmail.at.moicjarod.aix,是能用…...

Opencv之对图片的处理和运算

Opencv实现对图片的处理和修改 目录 Opencv实现对图片的处理和修改灰度图读取灰度图转换灰度图 RBG图单通道图方法一方法二 单通道图显色合并单通道图 图片截取图片打码图片组合缩放格式1格式2 图像运算图像ma[m:n,x:y]b[m1:n1,x1:y1] add加权运算 灰度图 读取灰度图 imread(‘…...

使用Excel制作通达信自定义“序列数据“

序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法:删掉没有用的数据(行与列)和股代码格式处理,是和外部数据的制作方法是相同,自己上面看历史博文。只需要判断一下,股代码跟随的…...

Qt工作总结02 <设置工具栏ToolBar>

相关博文 1. 代码 QToolBar * toolbar new QToolBar(this);QAction * btn1 new QAction("btn1"); btn1->setIcon(QIcon(":/images/btn1.png")); value->setCheckable(true); //按钮按下弹起 toolbar ->addAction(btn1);QAction * btn2 new …...

解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页

解决Springboot整合Shiro自定义SessionDAORedis管理会话,登录后不跳转首页 问题发现问题解决 问题发现 在Shiro框架中,SessionDAO的默认实现是MemorySessionDAO。它内部维护了一个ConcurrentMap来保存session数据,即将session数据缓存在内存…...

终极文档下载神器:一键获取全网免费文档的完整指南

终极文档下载神器:一键获取全网免费文档的完整指南 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决…...

告别复杂配置!intv_ai_mk11一键部署,小白也能轻松体验AI写作

告别复杂配置!intv_ai_mk11一键部署,小白也能轻松体验AI写作 1. 为什么选择intv_ai_mk11 在AI技术快速发展的今天,文本生成模型已经成为内容创作、客服问答、文案撰写等多个领域的得力助手。然而,对于大多数非技术背景的用户来说…...

微信小程序框架详解

小程序包含一个描述整体程序的app实例和多个描述页面的page。其中app由三个文件构成:公共配置app.json、公共样式app.wxss、主体逻辑app.js。每个page最多由四个文件构成:页面配置page.json、页面结构page.wxml、页面样式page.wxss、页面主体逻辑page.js。 微信小程序的主体部…...

启动器故障排除指南:Java环境修复与第三方冲突解决

启动器故障排除指南:Java环境修复与第三方冲突解决 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 当使用Minecraft启动器安装Forge时遇到"java.lang.NoC…...

5分钟快速部署:如何将手机摄像头变为电脑摄像头终极指南

5分钟快速部署:如何将手机摄像头变为电脑摄像头终极指南 【免费下载链接】droidcam GNU/Linux/nix client for DroidCam 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam 想让闲置的安卓手机变身高清电脑摄像头吗?DroidCam正是你需要的免费…...

千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录

千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录 1. 千问3.5-2B模型介绍 千问3.5-2B是Qwen系列中的小型视觉语言模型(VL),它能够同时理解图片内容和处理自然语言。这个模型特别适合那些需要在有限硬件资源上…...

PyTorch 2.8镜像开发者案例:独立开发者打造个人AI视频工作室技术栈

PyTorch 2.8镜像开发者案例:独立开发者打造个人AI视频工作室技术栈 1. 从零搭建AI视频工作室的技术选择 作为一名独立开发者,我一直在寻找能够支撑个人AI视频创作的技术方案。经过多次尝试,最终选择了基于PyTorch 2.8的深度学习镜像作为核心…...

Phi-4-mini-reasoning保姆级教学:Web服务健康检查失败的5类根因与对策

Phi-4-mini-reasoning保姆级教学:Web服务健康检查失败的5类根因与对策 1. 问题背景与模型介绍 Phi-4-mini-reasoning 是一款专注于推理任务的文本生成模型,特别擅长处理数学题、逻辑题、多步分析和简洁结论输出。与通用聊天模型不同,它采用…...

Phi-4-reasoning-vision-15B部署教程:内网验证+外网网关调试全流程避坑指南

Phi-4-reasoning-vision-15B部署教程:内网验证外网网关调试全流程避坑指南 1. 模型介绍 Phi-4-reasoning-vision-15B是微软推出的多模态视觉推理模型,具备强大的图像理解和分析能力。这个模型特别适合需要处理复杂视觉任务的场景,比如文档O…...

千问3.5-2B部署案例:RTX 4090 D单卡开箱即用,免配置镜像快速上手

千问3.5-2B部署案例:RTX 4090 D单卡开箱即用,免配置镜像快速上手 1. 千问3.5-2B模型简介 千问3.5-2B是Qwen系列中的小型视觉语言模型,它能够同时理解图片内容和处理自然语言。这个模型特别适合需要结合视觉和语言理解的任务场景。 1.1 核心…...