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

【JNI】hello world

JNI,作为java和C/C++的中间层,为在Java中调用C/C++代码提供了便利。作为初学者,这里简单记录学习的过程。

本文所有的操作都在kali linux上进行,jdk环境以及gcc,g++编译器需自行提前安装好
操作系统:
image-20241003163945657
jdk:
image-20241003163800941
gcc/g++:

创建Java文件:HelloJNI.java

public class HelloJNI { 

    static {
       //添加共享库
       System.loadLibrary("hello"); 
    }
  	//native代表底层调用C/C++代码
    private native String HelloWorld();
  
    public static void main(String[] args) {
       System.out.println(new HelloJNI().HelloWorld());
    }
 }

在终端中输入:

javac -h . HelloJNI.java

生成HelloJNI.class文件和HelloJNI.h文件

HelloJNI.h内容:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloJNI */

#ifndef _Included_HelloJNI
#define _Included_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloJNI
 * Method:    HelloWorld
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_HelloJNI_HelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

之后我们需要创建HelloJNI.cHelloJNI.cpp文件即可。

这里使用C++编程:

#include "HelloJNI.h"
#include <stdio.h>
#include <jni.h>

JNIEXPORT jstring JNICALL Java_HelloJNI_HelloWorld(JNIEnv *env, jobject obj){
    return env->NewStringUTF("JNI, hello world!");
}

输出一句话hello world

然后进行编译生成共享库:

g++ -fpic -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -shared -o libhello.so HelloJNI.cpp

最后添加共享库运行Java代码:

java -Djava.library.path=. HelloJNI

结果:
image-20241003163525925


http://www.kler.cn/news/340636.html

相关文章:

  • Spring 事务传播机制:深入理解与实践
  • 20241005给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时使用iperf3测网速
  • 某象异形滑块99%准确率方案
  • Springboot 整合 logback 日志框架
  • 校园资源共享新方案:基于SpringBoot的实现
  • 基于SpringBoot+Vue的在线投票系统
  • 【Unity】unity安卓打包参数(个人复习向/有不足之处欢迎指出/侵删)
  • Matter蓝牙解析
  • 06-Cesium 中动态处理与圆形扩散材质相关的属性
  • [nmap] 端口扫描工具的下载及详细安装使用过程(附有下载文件)
  • Java 中的 PO、VO、DAO、BO、DTO、POJO
  • 文件分块上传
  • 黑神话:仙童,数据库自动反射魔法棒
  • 【自动驾驶汽车通讯协议】I2C(IIC)总线通讯技术详解
  • Windows环境安装CentOS7
  • Lumerical 脚本语言——操作实体对象(Manipulating objects)
  • unix进程间通信信号的有效实践
  • 用KLineChart绘制股票行情K线图
  • 163页PPT罗兰贝格品牌战略升级:华为案例启示与电器集团转型之路
  • 《PyTorch深度学习快速入门教程》学习笔记(第15周)