JNI - "Cannot open include file: 'jni_md.h'"
I suspect that jni.h
is trying to #include <jni_md.h>
, which is then failing because you haven't added its location to your include path.
Try adding both of these entries to your C compiler's include path:
C:\Program Files\Java\jdk1.7.0\include
C:\Program Files\Java\jdk1.7.0\include\win32
The win32
path might not be necessary, depending on how jni.h
is set up.
A Simple Java Native Interface (JNI) example in Java
- env:jdk8、macOS 10.15
// Main.javapublic class Main { public native int intMethod(int i); static { System.loadLibrary("Main"); } public static void main(String[] args) { System.out.println(new Main().intMethod(2)); }}
// Main.c:#include "Main.h"JNIEXPORT jint JNICALL Java_Main_intMethod( JNIEnv *env, jobject obj, jint i){ return i * i;}
Compile and run:
javac Main.java -h .gcc -dynamiclib -O3 \ -I/usr/include \ -I$JAVA_HOME/include \ -I$JAVA_HOME/include/darwin \ Main.c -o libMain.dylibjava -cp . -Djava.library.path=$(pwd) Main
Output:
4
Try this,
HelloWorld.c
#include "HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj){ printf("Hello World!\n"); return;}
Compile it using cl.exe (I'm using VC++ and CL.EXE required following command line switches.)
c:\>cl -c /I"c:\Program Files\java\jdk1.7.0\include" /I"c:\Prog ram Files\java\jdk1.7.0\include\win32" HelloWorld.c
Link .obj module
c:\>link /libpath="c:\Program Files\java\jdk1.7.0\lib" HelloWorld.obj /dll