如何在Java中加载本机库时调试问题?

时间:2010-02-18 15:51:58

标签: java java-native-interface

我遇到了与JNI和Java相关的问题。事情就是这样:客户希望我们在他的系统上安装某个应用程序。这个应用程序使用本机库,但客户端不希望将这些库放在他的系统文件夹中,原因我并不真正了解或理解,但无法更改。

为了避免这个问题,我尝试使用-Djava.library.path启动JVM,并在其中添加正确的dll。但事实是,当我尝试启动我的项目时,我有一个UnsatisfiedLinkError。从我所看到的,问题不是在主dll调用(因为文件显然存在,我在调试时看到它),我认为必须是这个第一个dll链接的一些库有问题,但我不喜欢我不知道如何找到丢失的dll。

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:3)

我的第一个调用端口(即使是JNI调试)总是Dependency Walker。如果没有别的,它会告诉你DLL所依赖的每个其他DLL。

ldd与Linux等效。

答案 1 :(得分:0)

我认为该参数用于指定目录,而不是文件。因此,如果您的dll为c:\mylibs\lib1.dll,那么您必须将其值设置为c:\mylibs

我不知道它是否允许多条路径。我来看看。

修改

该参数允许多个路径。

请参阅http://java.sun.com/docs/books/jni/html/start.html

中的第2.7节

它没有指定格式,但我想你可以使用与classpath相同的分隔符。它说你也可以使用PATH系统变量。