Maison >Java >javaDidacticiel >Comment implémenter JNI et l'invocation de méthodes locales de la technologie sous-jacente Java

Comment implémenter JNI et l'invocation de méthodes locales de la technologie sous-jacente Java

王林
王林original
2023-11-08 12:26:11622parcourir

Comment implémenter JNI et linvocation de méthodes locales de la technologie sous-jacente Java

Comment implémenter JNI et l'invocation de méthodes locales de la technologie sous-jacente de Java

Java est un langage de programmation multiplateforme, mais nous devons parfois interagir avec le code C ou C++ sous-jacent. En Java, nous pouvons accéder aux méthodes locales via JNI (Java Native Interface) pour communiquer avec le code sous-jacent. Cet article explique comment utiliser JNI pour implémenter Java et les appels de méthodes natives, et fournit des exemples de code spécifiques.

Tout d'abord, nous devons préparer une classe Java qui sera utilisée pour déclarer les méthodes locales que nous devons appeler. Par exemple, nous créons une classe nommée JNIExample, qui déclare une méthode locale add, qui est utilisée pour ajouter deux entiers et renvoyer le résultat :

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

Dans le code ci-dessus, nous utilisons un bloc de code statique pour charger la bibliothèque locale JNIExample. Cette bibliothèque native est une bibliothèque de liens dynamiques compilée et générée par le code C/C++ que nous utiliserons pour implémenter la méthode native.

Ensuite, nous devons écrire un fichier source C/C++ pour implémenter la méthode add. Nous nommons ce fichier JNIExample.cpp. Voici l'exemple de code dans JNIExample.cpp :

#include <jni.h>

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

Dans le code ci-dessus, nous implémentons la méthode add et terminons l'opération d'addition d'entier en implémentant cette méthode en C/C++. La signature de cette méthode doit être cohérente avec la méthode déclarée en Java et doit être modifiée à l'aide des macros JNIEXPORT et JNICALL.

Ensuite, nous devons utiliser l'outil JNI de Java pour compiler les fichiers sources C/C++ dans une bibliothèque de liens dynamiques liée à la plate-forme. Utilisez la commande suivante dans la ligne de commande pour compiler :

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

Dans la commande ci-dessus, nous utilisons le compilateur gcc pour compiler JNIExample.cpp dans la bibliothèque de liens dynamiques libJNIExample.so. Notez que remplacez ${JAVA_HOME} par le répertoire d'installation Java et ${TARGET} par le répertoire du système d'exploitation cible.

Une fois la compilation terminée, nous obtiendrons une bibliothèque de liens dynamiques nommée libJNIExample.so. Placez ce fichier de bibliothèque dans le même répertoire que votre classe Java ou spécifiez un chemin contenant la bibliothèque.

Enfin, nous pouvons appeler la méthode add de la classe JNIExample dans le programme Java pour interagir avec les méthodes locales. Vous trouverez ci-dessous un exemple de code utilisant la classe JNIExample :

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

Dans le code ci-dessus, nous créons un objet JNIExample et appelons sa méthode add. Cette méthode appellera la méthode add que nous avons implémentée précédemment en C/C++ et renverra le résultat. Enfin, nous imprimons les résultats.

Grâce aux étapes ci-dessus, nous pouvons utiliser JNI pour implémenter Java et les appels de méthodes locales. Grâce à JNI, nous pouvons interagir avec le code C/C++ sous-jacent pour obtenir un développement d'applications plus flexible et plus efficace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn