2010-08-11 109 views
0

我正在使用JNI將本機C++庫鏈接到我的Java應用程序中。我使用System.loadLibrary()加載我的庫,並且一切似乎都正常。我將功能添加到我的C++ dll中,該功能現在正在從第三方軟件系統調用多個其他dll。不幸的是其中一個dll被命名爲ZIP.dll。 java loadLibrary操作是在查看我的項目目錄之前在/ jre/bin中找到這個相關的dll,以便它嘗試使用那個。這兩個DLL不完全相同,所以我得到一個UnsatisfiedLinkError,說沒有找到指定的程序。JNI - System.LoadLibrary()發現錯誤的依賴dll

有沒有辦法告訴java在加載DLL時在哪裏查找依賴庫?

回答

2

我相信System.load與全路徑名稱而不是System.loadLibrary應該做的伎倆。

+0

我的庫依賴於名爲zip.dll的輔助庫。 System.load只允許我指定我的庫的路徑...從這一點java出去尋找所有的依賴庫,它找到了錯誤的。 我需要一種方法來指定從屬庫的路徑... – Kyle 2010-08-11 21:55:51

+0

'zip.dll'上的System.load然後System.load上的庫? – KitsuneYMG 2011-02-03 16:51:03

0

我不認爲有可能同時加載兩個具有相同名稱的不同DLL。您可以更改路徑上的順序,以便首先加載正確的ZIP.dll(這可能會導致jvm問題),或者您可以將ZIP.dll文件重命名爲其他內容。重命名ZIP.dll可能是最簡單的方法。