由于递归依赖性,Java中出现不满意的链接错误(无法找到依赖库)

由于递归依赖性,Java中出现不满意的链接错误(无法找到依赖库),java,dll,java-native-interface,Java,Dll,Java Native Interface,我有一个Java应用程序,它在运行时使用System.loadLibrary()从指定文件夹加载一些DLL。应用程序成功加载了在文件夹中找到的除一个之外的所有DLL。如果加载失败,它会报告错误: C:\myapp\lib\foo.dll:找不到依赖库 我已经在DependencyWalker中打开了foo.dll,但它没有报告任何问题(它将IESHIMS.dll和WER.dll列为缺失,但这些是警告,据我所知,可以忽略)。依赖关系树列出了WSOCK32.DLL、KERNEL32.DLL和lib文

我有一个Java应用程序,它在运行时使用System.loadLibrary()从指定文件夹加载一些DLL。应用程序成功加载了在文件夹中找到的除一个之外的所有DLL。如果加载失败,它会报告错误:

C:\myapp\lib\foo.dll:找不到依赖库

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


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

AFAIK Dependency Walker也在库本身所在的文件夹中搜索依赖项库。LoadLibrary不这样做。我的猜测是,当您使用LoadLibrary加载依赖项时,您使用的是完整路径,这就是为什么可以找到并加载它,但当您加载另一个库时,却找不到它。

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

确保使用与可执行文件(例如javaw.exe)匹配的32位或64位版本

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