I am working on a sample
Java Native Interface program, and was able to compile the Java portion with the latest 64-bit JDK. As you may know, this type of project also has a C source code. I have MinGw on my laptop, which run Windows 10. When I try to run the program, however I see the following error message:
C:\Users\sansari\Documents\source\java>ls
HelloJNI.c HelloJNI.class HelloJNI.exe HelloJNI.h HelloJNI.java hello.dll
C:\Users\sansari\Documents\source\java>rm hello.dll
C:\Users\sansari\Documents\source\java>gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o HelloJNI.dll HelloJNI.c
C:\Users\sansari\Documents\source\java>java HelloJNI
Exception in
thread "main" java.lang.UnsatisfiedLinkError: C:\Users\sansari\Documents\source\java\HelloJNI.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at HelloJNI.<clinit>(HelloJNI.java:3)
C:\Users\sansari\Documents\source\java>java -Djava.library.path=. HelloJNI
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\sansari\Documents\source\java\HelloJNI.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at HelloJNI.<clinit>(HelloJNI.java:3)
C:\Users\sansari\Documents\source\java>ls
HelloJNI.c HelloJNI.class HelloJNI.dll HelloJNI.exe HelloJNI.h HelloJNI.java
C:\Users\sansari\Documents\source\java>ls
HelloJNI.c HelloJNI.class HelloJNI.dll HelloJNI.exe HelloJNI.h HelloJNI.java
Here is what is in my HelloJNI.java
Here are the rest of the files:
C:\Users\sansari\Documents\source\java>ls
HelloJNI.c HelloJNI.class HelloJNI.dll HelloJNI.exe HelloJNI.h HelloJNI.java
I started out with the HelloJNI.java and compiled it with javac command. I then used javah to get HelloJNI.h. Here is what is in HelloJNI.c: