title: How should I load native libraries for JNI to avoid an UnsatisfiedLinkError?
body: <p>I want to use JNI on Ubuntu 8.10, using Eclipse and gcc (the standard one with Ubuntu if there are flavours).</p>
  
  <p>I can't seem to load my library despite the make file creating it successfully.</p>
  
  <p>The main Java class is as follows:</p>
  
  <pre><code>class Hello {
      public native void sayHello();
  
      static {
          System.loadLibrary("hello.so");
      }
  
      public static void main(String[] args) {
          Hello h = new Hello();
          h.sayHello();
      }
  }
  </code></pre>
  
  <p>My make file is as such;</p>
  
  <pre><code>    all : hello.so
  
  hello.so : Hello.o
      gcc -shared -o hello.so Hello.o
  
  Hello.o : Hello.c Hello.h
      gcc -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -c Hello.c -o Hello.o
  
  Hello.h : Hello.class
      javah -jni Hello
  
  clean :
      -del Hello.h
      -del Hello.o
  </code></pre>
  
  <p>The rest of the code (Hello.c) looks like one would think.</p>
  
  <p>The error I'm getting is as follows;</p>
  
  <pre><code>Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello.so in java.library.path
  </code></pre>
  
  <p>If I use an explicit path:</p>
  
  <pre><code>System.loadLibrary("/home/gavin/Work/workspace/JNI/hello.so");
  </code></pre>
  
  <p>Then it works, but I'd much rather not use an explicit path if possible.</p>