2013-07-03 41 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