Java Native Interface 32 bit dll on 64 bit system

52,366

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

  1. Download mingw-w64.
  2. Update your Environment variable PATH.
  3. Create a C program named test.c which has implementation for your method.
  4. 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

Share:
52,366
Frank Vanbever
Author by

Frank Vanbever

I'm Frank, i'm a Electronics Engineering student with a passion for programming.

Updated on January 28, 2020

Comments

  • Frank Vanbever
    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?