Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan JNI dan kaedah tempatan menggunakan teknologi asas Java

Bagaimana untuk melaksanakan JNI dan kaedah tempatan menggunakan teknologi asas Java

王林
王林asal
2023-11-08 12:26:11572semak imbas

Bagaimana untuk melaksanakan JNI dan kaedah tempatan menggunakan teknologi asas Java

Cara melaksanakan teknologi asas Java JNI dan kaedah tempatan memanggil

Java ialah bahasa pengaturcaraan merentas platform, tetapi kadangkala kita perlu Berinteraksi dengan kod C atau C++ yang mendasari. Di Jawa, kami boleh mengakses kaedah tempatan melalui JNI (Antara Muka Asli Java) untuk berkomunikasi dengan kod asas. Artikel ini akan memperkenalkan cara menggunakan JNI untuk melaksanakan Java dan panggilan kaedah asli, dan menyediakan beberapa contoh kod khusus.

Pertama, kita perlu menyediakan kelas Java, yang akan digunakan untuk mengisytiharkan kaedah tempatan yang perlu kita panggil. Sebagai contoh, kami mencipta kelas bernama JNIExample, yang mengisytiharkan penambahan kaedah setempat, yang digunakan untuk menambah dua integer dan mengembalikan hasilnya:

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

Dalam kod di atas, kami menggunakan blok kod statik untuk memuatkan perpustakaan asli JNIExample. Pustaka asli ini ialah perpustakaan pautan dinamik yang disusun dan dijana oleh kod C/C++ yang akan kami gunakan untuk melaksanakan kaedah asli.

Seterusnya, kita perlu menulis fail sumber C/C++ untuk melaksanakan kaedah tambah. Kami menamakan fail ini JNIExample.cpp. Berikut ialah kod sampel dalam JNIExample.cpp:

#include <jni.h>

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

Dalam kod di atas, kami melaksanakan kaedah tambah dan melengkapkan operasi penambahan integer dengan melaksanakan kaedah ini dalam C/C++. Tandatangan kaedah ini mesti konsisten dengan kaedah yang diisytiharkan dalam Java dan perlu diubah suai menggunakan makro JNIEXPORT dan JNICALL.

Seterusnya, kita perlu menggunakan alat JNI Java untuk menyusun fail sumber C/C++ ke dalam perpustakaan pautan dinamik berkaitan platform. Gunakan arahan berikut dalam baris arahan untuk menyusun:

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

Dalam arahan di atas, kami menggunakan pengkompil gcc untuk menyusun JNIExample.cpp ke dalam perpustakaan pautan dinamik libJNIExample.so. Ambil perhatian bahawa gantikan ${JAVA_HOME} dengan direktori pemasangan Java dan ${TARGET} dengan direktori sistem pengendalian sasaran.

Selepas penyusunan selesai, kami akan mendapat perpustakaan pautan dinamik bernama libJNIExample.so. Letakkan fail perpustakaan ini dalam direktori yang sama dengan kelas Java anda atau tentukan laluan yang mengandungi pustaka.

Akhir sekali, kita boleh memanggil kaedah tambah kelas JNIExample dalam program Java untuk berinteraksi dengan kaedah tempatan. Berikut ialah contoh kod menggunakan kelas 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);
    }
}

Dalam kod di atas, kami mencipta objek JNIExample dan memanggil kaedah tambahnya. Kaedah ini akan memanggil kaedah tambah yang kami laksanakan sebelum ini dalam C/C++ dan mengembalikan hasilnya. Akhirnya, kami mencetak hasilnya.

Melalui langkah di atas, kita boleh menggunakan JNI untuk melaksanakan Java dan panggilan kaedah asli. Melalui JNI, kami boleh berinteraksi dengan kod C/C++ asas untuk mencapai pembangunan aplikasi yang lebih fleksibel dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan JNI dan kaedah tempatan menggunakan teknologi asas Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn