メイン参照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