0

I was getting an exception: UnsatisfiedLinkError when I was trying to load a library. I had placed the library file in the right path and added the path to the PATH env variable. But nothing seemed to work. Untill I changed the Tomcat configuration and added -Djava.library.path=C:\Windows\System32 to the java options. One of my colleagues did not have to do this and yet it worked fine on her system, what is it that I am missing? Can anybody throw some light on this pleasE?

Madz
  • 199
  • 5
  • 18

2 Answers2

0

One option could be to register the dll

Regsvr32 “path to your dll.dll”.

This will install/register the dll (I am assuming it is a dll)

But I have generally observed that if it is COM dll then you have to register it and put it in System32

mulayamod
  • 1
  • 2
0

In JNI the name of Java native method and the name of corresponding C function are not same. In order to call C function, the name of C function MUST include the prefix "Java_", the class name and method name. The easy way is using the program "javah" in order to generate a header file including all definitions.

Try with following example for Windows: (remember that the Java class name must be the same that corresponding file name)

Step 1. Create the following Java file (P.java):

class P
{
  static
  {
    // "P" is the name of DLL without ".dll"
    System.loadLibrary ("P");
  }

  public static native void f(int i);

  public static void main(String[] args)
  {
    f(1);
  }
}

Step 2. javac P.java

Step 3. javah P

Then, "javah" generates the header file "P.h"

Step 4. Create the file "P.def" including the following two lines (this file defines the exported symbols, in this case the name of C function):

EXPORTS
Java_P_f

Step 5. Create your C file (P.c):

#include "p.h"

JNIEXPORT void JNICALL Java_P_f(JNIEnv *env, jclass c, jint i)
{
  printf("%i\n",i);
}

Step 6. Within Visual Studio command promt, define the following variables:

set JAVA_HOME= the path of JDK

set include=%include%;%JAVA_HOME%\include;%JAVA_HOME%\include\win32

Step 7. Generate DLL:

cl /LD P.c P.def

Step 8. Run the Java program:

java P

(Note: P.dll and P.class are located in the same directory)