S
sharad nangia
Hello,
I was facing problems with JNI such as "Exception in thread "main"
java.lang.UnsatisfiedLinkError" on solaris 8. Even after a futile
search on various discussion boards, there was no answer to the
problem, so with a little R&D here is a solution to the problem ..
though not sure whether people are already aware and havent posted
answer.
This is true for solaris machines only and havent tested for windows
or other OS.
1. Firstly make sure that directory which contains the so (shared
object) file is already contained in LD_LIBRARY_PATH.
2. There is a naming convention which needs to be followed. When u
compile your C or C++ code to a shared object (say listfiles.so)
prefix it with lib (i.e liblistfile.so) ..this is mandatory to do so.
However ur java calling program would load the library (with name
without the lib (i.e listfiles.so)), failing to comply to this u would
definately get UnsatisfiedLink error.
Inshort..
java code would have something like this ..
System.loadLibrary(listfiles)
and the shared object would be named as (liblistfiles.so)
directory which contains liblistfiles.so is
/home/sharad/lib/liblistfiles.so
in ksh shell -
export LD_LIBRARY_PATH=/home/sharad/lib:$LD_LIBRARY_PATH
hope the above information is useful.
I was facing problems with JNI such as "Exception in thread "main"
java.lang.UnsatisfiedLinkError" on solaris 8. Even after a futile
search on various discussion boards, there was no answer to the
problem, so with a little R&D here is a solution to the problem ..
though not sure whether people are already aware and havent posted
answer.
This is true for solaris machines only and havent tested for windows
or other OS.
1. Firstly make sure that directory which contains the so (shared
object) file is already contained in LD_LIBRARY_PATH.
2. There is a naming convention which needs to be followed. When u
compile your C or C++ code to a shared object (say listfiles.so)
prefix it with lib (i.e liblistfile.so) ..this is mandatory to do so.
However ur java calling program would load the library (with name
without the lib (i.e listfiles.so)), failing to comply to this u would
definately get UnsatisfiedLink error.
Inshort..
java code would have something like this ..
System.loadLibrary(listfiles)
and the shared object would be named as (liblistfiles.so)
directory which contains liblistfiles.so is
/home/sharad/lib/liblistfiles.so
in ksh shell -
export LD_LIBRARY_PATH=/home/sharad/lib:$LD_LIBRARY_PATH
hope the above information is useful.