如果dll不放在test.class相同目录下,会出现如下提示(我作的是hellow程序): Exception in thread "main" java.lang.UnsatisfiedLinkError: no hellow in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1312) at java.lang.Runtime.loadLibrary0(Runtime.java:749) at java.lang.System.loadLibrary(System.java:820) at HelloWorld.<clinit>(HellowWorld.java:10) 若dll放在test.class相同目录,会出现如楼主所出现的提示
我用Delphi改写你的代码,将.Dll文件放到与Test.class相同的目录,没有出现问题
set LD_LIBRARY_PATH=.so文件所在目录 export LD_LIBRARY_PATH 然后再执行你的JAVA程序
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hellow in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1312)
at java.lang.Runtime.loadLibrary0(Runtime.java:749)
at java.lang.System.loadLibrary(System.java:820)
at HelloWorld.<clinit>(HellowWorld.java:10)
若dll放在test.class相同目录,会出现如楼主所出现的提示
export LD_LIBRARY_PATH
然后再执行你的JAVA程序
gcc -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -Wl,--add-stdcall-alias -shared -o call.dll call.c
参数:-Wl,--add-stdcall-alias 可以为函数加上标准调用前缀(stdcall @nn)。
这样编译出的dll就可以了。都知道win32中dll中的函数要求有标准调用前缀,在JNI中不方便手动处理这个,Sun又没说清楚这事由编译器办。所以搞得我很郁闷。找了大半个月,终于在一个很古老的网页上找到答案。
网址:http://www.inonit.com/cygwin/jni/helloWorld/c.html
谢谢大家!