Java runtime error with JNI -
i trying build , run example jni program. program sample helloworld program. did not write assume works. running on linux. there 4 files.
hellonative.c hellonative.h hellonative.java hellonativetest.java to build files, did
gcc -i/mydir/jdk/include -i/mydir/jdk/include/linux -fpic -c hellonative.c gcc -shared -o hellonative.so hellonative.o java *java here result of build
hellonative.c hellonative.h hellonative.o hellonativetest.class hellonative.class hellonative.java hellonative.so hellonativetest.java then did
setenv ld_library_path /mydir/myexample:${ld_library_path} java hellonativetest i got following error
exception in thread "main" java.lang.unsatisfiedlinkerror: no hellonative in java.library.path @ java.lang.classloader.loadlibrary(classloader.java:1734) @ java.lang.runtime.loadlibrary0(runtime.java:823) @ java.lang.system.loadlibrary(system.java:1028) @ hellonative.<clinit>(hellonative.java:9) @ hellonativetest.main(hellonativetest.java:8) i checked ld_library_path , helloclasstest , hellonative.so, there. tried specify -classpath also, did not seem matter. have ideas ?
do following, x="hellonative".
- give library filename following system-dependent standard. on linux, name library
libx.so. - set
java.library.pathsystem property directory containing library. - call
system.loadlibrary("x")"x" cross-platform part of library name above.
you named library hellonative.so; change libhellonative.so.
from http://download.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp679:
the argument system.loadlibrary library name chosen arbitrarily programmer. system follows standard, platform-specific, approach convert library name native library name. example, solaris system converts name pkg_cls libpkg_cls.so, while win32 system converts same pkg_cls name pkg_cls.dll.
if use osgi in future, there's alternative setting java.library.path.
Comments
Post a Comment