当前位置: 首页 > 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文件,方可执行最新功能

后续将实现更复杂的功能

http://www.lryc.cn/news/510544.html

相关文章:

  • 解决:excel鼠标滚动幅度太大如何调节?
  • Git和SVN有什么区别?
  • 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。
  • 【ES6复习笔记】解构赋值(2)
  • Dockerfile的用法
  • Docker 安装mysql ,redis,nacos
  • Axure RP 11 详细保姆级安装教程(附安装包)
  • Java处理视频思路
  • 攻防世界 robots
  • DBeaver 咋手动配置sqlite 驱动
  • RestTemplate关于https的使用详解
  • 消息中间件RabbitMQ和kafka
  • 学习C++:标识符命名规则
  • Bluetooth Spec【0】蓝牙核心架构
  • AppInventor2 ClientSocketAI2Ext 拓展加强版 - 为App提供TCP客户端接入,可发送二进制数据
  • Opencv之对图片的处理和运算
  • 使用Excel制作通达信自定义“序列数据“
  • Qt工作总结02 <设置工具栏ToolBar>
  • 解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页
  • Day56 图论part06
  • [python SQLAlchemy数据库操作入门]-04.连接数据库:增删改查
  • 黑马点评——基于Redis
  • RocketMQ的集群架构是怎样的?
  • VS2022+QT6.7 窗口置灰(遮罩)
  • 如何通过HTTP API插入或更新Doc
  • C++ STM32 F4xx USART LL库 DMA + IDLE ISR 驱动裸机 +FreeRTOS 任务通知
  • RK3588在Android13/14如何查看GPU,NPU,DDR,RGA数据
  • sentinel学习笔记6-限流降级(上)
  • 【Rust自学】6.4. 简单的控制流-if let
  • 【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下