自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/Wait_Godot/article/details/142693270

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!