Java Native Interface 32 bit dll on 64 bit system
Solution 1
Just to state the obvious: to load a native library built for a 32bit architecture, you have to force the JVM to start in 32bit mode.
java -d32 ...
Possibly you need to install an older JVM for your platform (eg. Oracle's Java 7 on OS X is 64bit only, you need to get Apple's Java 6 from their knowledge base).
Solution 2
I got that same error message (without the stacktrace) after installing the Java plugin for the Chrome browser.
Re-installing JDK/JRE (this is a development environment) fixed it for me.
Solution 3
- Download mingw-w64.
- Update your Environment variable PATH.
- Create a C program named test.c which has implementation for your method.
Run the following cmd in Command prompt
gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o test.dll test.c
Frank Vanbever
I'm Frank, i'm a Electronics Engineering student with a passion for programming.
Updated on January 28, 2020Comments
-
Frank Vanbever over 4 years
E:\Code\Java\JNITest>java test Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\Code\Java\JNITest\test.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 test.main(test.java:16)`
While using Java Native Interface I ran into a problem that generated this error. I believe this is because I compiled the .dll with MinGW which compiles to a 32-bit .dll whilst my system is 64-bit and thus my Java runs at 64-bit. Is there anyway to force my Java to run at 32-bits?