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