Home  >  Article  >  Java  >  How to implement JNI and local method invocation of Java underlying technology

How to implement JNI and local method invocation of Java underlying technology

王林
王林Original
2023-11-08 12:26:11511browse

How to implement JNI and local method invocation of Java underlying technology

How to implement JNI and local method invocation of Java's underlying technology

Java is a cross-platform programming language, but sometimes we need to communicate with the underlying C or C code to interact. In Java, we can access local methods through JNI (Java Native Interface) to communicate with the underlying code. This article will introduce how to use JNI to implement Java and native method calls, and provide some specific code examples.

First, we need to prepare a Java class, which will be used to declare the local methods we need to call. For example, we create a class named JNIExample, which declares a local method add, which is used to add two integers and return the result:

public class JNIExample {
    static {
        System.loadLibrary("JNIExample");
    }
    
    public native int add(int a, int b);
}

In the above code, we use the static code block to load the native library JNIExample. This native library is a dynamic link library compiled and generated by the C/C code we will use to implement the native method.

Next, we need to write a C/C source file to implement the add method. We name this file JNIExample.cpp. The following is the sample code in JNIExample.cpp:

#include <jni.h>

JNIEXPORT jint JNICALL Java_JNIExample_add(JNIEnv *env, jobject obj, jint a, jint b) {
    return a + b;
}

In the above code, we implement the add method, and complete the integer addition operation by implementing this method in C/C. The signature of this method must be consistent with the method declared in Java and needs to be modified using the JNIEXPORT and JNICALL macros.

Next, we need to use Java's JNI tool to compile the C/C source files into a platform-related dynamic link library. Use the following command in the command line to compile:

gcc -shared -fpic -I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/${TARGET}" -o libJNIExample.so JNIExample.cpp

In the above command, we use the gcc compiler to compile JNIExample.cpp into the libJNIExample.so dynamic link library. Note that replace ${JAVA_HOME} with the Java installation directory and ${TARGET} with the directory of the target operating system.

After compilation is completed, we will get a dynamic link library named libJNIExample.so. Place this library file in the same directory as your Java class, or specify a path that contains the library.

Finally, we can call the add method of the JNIExample class in the Java program to interact with local methods. The following is a sample code using the JNIExample class:

public class Main {
    public static void main(String[] args) {
        JNIExample jniExample = new JNIExample();
        int result = jniExample.add(10, 20);
        System.out.println("Result: " + result);
    }
}

In the above code, we create a JNIExample object and call its add method. This method will call the add method we implemented previously in C/C and return the result. Finally, we print the results.

Through the above steps, we can use JNI to implement Java and local method calls. Through JNI, we can interact with the underlying C/C code to achieve more flexible and efficient application development.

The above is the detailed content of How to implement JNI and local method invocation of Java underlying technology. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn