【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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forgotten Legend

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值