我有一个Java应用程序,它使用System.loadLibrary()在运行时从指定的文件夹加载一些DLL。应用程序成功加载它在文件夹中找到的所有DLL之外的所有DLL。在加载失败的情况下,它会报告错误:
C:\ myapp \ lib \ foo.dll:找不到依赖库
我在DependencyWalker中打开了foo.dll但它没有报告任何问题(它列出了IESHIMS.DLL和WER.DLL缺失,但这些都是警告,据我所知,这些可以忽略)。依赖关系树列出了WSOCK32.DLL,KERNEL32.DLL和lib文件夹中包含的另一个特定于应用程序的DLL(并且成功加载了它)。
我最好的猜测是,foo.dll依赖于我的lib文件夹中不存在的另一个DLL,但我不知道如何获得有关此依赖项的更多信息。任何人都可以建议一种调试方法吗?
答案 0 :(得分:0)
AFAIK Dependency Walker也会在lib本身所在的文件夹中搜索依赖库。 LoadLibrary不会这样做。我的猜测是,当您使用LoadLibrary加载依赖项时,您可以使用完整路径来执行此操作,这就是为什么可以找到并加载它,但是当您加载其他库时,它找不到。
答案 1 :(得分:0)
Dependency Walker有个人资料模式。使用它来查看哪些模块最终无法加载。您可能会看到一些最终找到的失败,因为一些模块通过尝试文件名的各种前缀和后缀来匹配。
请务必使用与您的可执行文件匹配的32位或64位版本(例如,javaw.exe)。
要了解DLL搜索路径,请参阅MSDN上的documentation。