【JNI】hello world

发布于:2024-10-09 ⋅ 阅读:(192) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到