JNIの使用

メイン参照https://blog.csdn.net/joeysheng/article/details/65446025が、いくつかの場所は同じではありません、そして環境の違いは、元のバグを伴います。

ステップ1:Javaコードを記述

class HelloJNI{
    // 本地方法声明
    native void printHello();
    native void printString(String str);
   
    // 加载库
    static{ System.loadLibrary("HelloJNI"); }

    public static void main(String args[])
    {
       HelloJNI myJNI = new HelloJNI();

        // 调用本地方法(实际调用的事使用C语言编写的JNI本地函数)
        myJNI.printHello();
        myJNI.printString("Hello World from printString fun");
    }
}

ステップ2:Javaコードをコンパイルします

javac HelloJNI.java

第三段階:Cヘッダファイルを生成します

C言語のヘッダファイルを生成するjavahはコマンドを使用して、次のコマンド

javah HelloJNI

前者は、テキストはあなたがを参照することができ、実際には、java10後にこのコマンドがサポートされていない、以前の時間を書くことができるのヒント

ステップ4:Cのコードを書きます

#include "CPP_JNI.h"
#include <stdio.h>
   
   JNIEXPORT void JNICALL Java_test_printHello(JNIEnv *env, jobject object)
   {
      printf("Hello World!\n");
       return;
   }
   
   JNIEXPORT void JNICALL Java_test_printString(JNIEnv *env, jobject object, jstring string)
   {
      // 将 Java String转换为C字符串
     const char *str = (*env)->GetStringUTFChars(env,string,0);
     printf("%s!\n", str);
     return;
   }

ステップ5:C共有ライブラリを生成します

jni.h中(\ Javaの\ JDK-11.0.2 \含まれるもの) とjni_md.h(\ Javaが\ JDK-11.0.2は、 \は、\ win32のは) 現在のフォルダにコピーされます。
コマンドライン実行で勝ちます

gcc -fPIC -shared HelloJNI.c -o HelloJNI.dll

ここで私は問題外でした

 Can't load IA 32-bit .dll on a AMD 64-bit platform

JDK 64は、次に、生成されたDLLのGCC 32は、次に与えられています。だから、再インストール64ビットのgccを、成功した操作を再パッケージ。

ステップ6:実行するJavaプログラム

java HelloJNI

おすすめ

転載: blog.csdn.net/saber_jk/article/details/92698870