2013-07-03 39 views
1

我有一个Java应用程序,在运行时使用System.loadLibrary()从指定的文件夹加载一些DLL。应用程序成功加载了它在文件夹中找到的所有DLL,但只有一个。在不成功的负载的情况下,它报告错误:UnsatisfiedLinkError(无法找到依赖库)在Java中由于递归依赖

C:\myapp\lib\foo.dll: Can't find dependent libraries

我在DependencyWalker打开foo.dll但它没有报告任何问题(它列出IESHIMS.DLL和WER.DLL作为失踪,但这些都是警告,据我所知,这些可以忽略)。依赖关系树列出了WSOCK32.DLL,KERNEL32.DLL和lib文件夹中包含的其他应用程序特定的DLL(并成功加载)。

我最好的猜测是foo.dll依赖于另一个DLL,它不存在于我的lib文件夹中,但我不知道如何获得有关此依赖项的更多信息。任何人都可以提出一种调试方法吗?

回答

0

AFAIK依赖性Walker还在lib本身所在的文件夹中搜索依赖库。 LoadLibrary不会这样做。我的猜测是,当你用LoadLibrary加载依赖关系时,你会用完整路径来完成它,这就是为什么它可以被找到并加载,但是当你加载其他库时,找不到它。

0

Dependency Walker有一个配置文件模式。用它来查看哪些模块最终无法加载。您可能会看到一些最终找到的失败,因为有些模块通过尝试各种前缀和后缀来匹配文件名。

请务必使用与您的可执行文件(例如,javaw.exe)相匹配的32位或64位版本。

要了解DLL搜索路径,请参阅MSDN上的documentation