2010-03-09 59 views
8

在加載一個dll文件,我得到以下異常:問題而加載的DLL庫文件... java.lang.UnsatisfiedLinkError中:無法加載庫

Exception in thread "main" java.lang.UnsatisfiedLinkError: 
    D:\Transliteration\rlpnc-3.1.0-sdk-ia32-w32-msvc80\rlp\bin\ia32-w32-msvc80\btrntjni.dll: 
    The system cannot find message text for message number 0x%1 in the message file for %2 

at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary0(Unknown Source) 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.load0(Unknown Source) 
at java.lang.System.load(Unknown Source) 
at com.basistech.util.internal.Native.loadLibrary(Unknown Source) 
at com.basistech.rnt.jni.<clinit>(Unknown Source) 
at com.basistech.rnt.RNTEnvironment.<init>(Unknown Source) 
at SampleTranslator.<init>(TranslateNameSample.java:88) 
at TranslateNameSample.main(TranslateNameSample.java:62) 

不知道的根本原因的問題。任何人都可以幫我解決這個問題。

感謝, 巴斯卡爾

+0

你是否已經找到了原因? – fish 2010-04-09 11:03:28

回答

-1

檢查 「的java.library.path」 包括含有.dll文件的文件夾。
在Windows機器上它與PATH有關。
http://www.inonit.com/cygwin/jni/helloWorld/load.html

+0

是的,它包含但仍然問題出現:( – 2010-03-09 08:18:25

+0

請發佈完整的CLASSPATH – Padmarag 2010-03-09 08:31:17

+0

這裏它去.. D:\ apache-ant-1.8。0 \ lib中; d:\音譯\ RLP-6.5.0-SDK-IA32-W32-msvc80 \ RLP \ lib中\ IA32-W32-msvc80; d:\音譯\ rlpnc-3.1.0-SDK-IA32-w32- msvc80 \ RLP \ lib中\ IA32-W32-msvc80; d:\音譯\ rlpnc-3.1.0-SDK-IA32-W32-msvc80 \ rlpnc \樣品\ java中; d:\音譯\ RLP-6.5.0-sdk- IA32-W32-msvc80 \ RLP \ BIN \ IA32-W32-msvc80; d:\音譯\ rlpnc-3.1.0-SDK-IA32-W32-msvc80 \ RLP \ BIN \ IA32-W32-msvc80 ;. – 2010-03-09 08:38:12

2

這不需要對類路徑做任何事情。將DLL放置在PATH環境變量中列出的目錄之一的當前目錄中,或者最重要的是,使用系統屬性java.library.path設置本機庫搜索路徑

java -Djava.library.path=C:\MyNativeLibs MyMainClass 
+0

該目錄已列在PATH env變量中。但我仍然得到這個錯誤。 爲了使這個簡單,這裏是我試圖運行代碼.. 公共類識別TestClass { \t公共靜態無效的主要(字串[] args){ \t \t的System.loadLibrary( 「btrntjni」); \t} } – 2010-03-10 07:20:58

+0

以下例外快到了.. 異常在線程 「主要」 java.lang.UnsatisfiedLinkError中:d:\音譯\ rlpnc-3.1.0-SDK-IA32-W32-msvc80 \ rlpnc \樣品\ java \ btrntjni.dll:系統無法在消息文件中找到消息文本中的消息文件%2 \t at java.lang.ClassLoader $ NativeLibrary.load(Native Method) \t at java.lang.ClassLoader .loadLibrary0(未知來源) \t在java.lang.ClassLoader.loadLibrary(未知來源) \t在java.lang.Runtime.loadLibrary0(未知來源) \t在java.lang.System.loadLib rary(Unknown Source) \t at testClass.main(testClass.java:7) – 2010-03-10 07:26:40

1

以及檢查你正在把路徑DLL在正確的環境變量,你也應該檢查以下內容:

  • 正在加載的DLL都有其所有的依賴性來滿足。換句話說,如果此DLL依賴於其他DLL,請確保可以找到這些DLL。

  • 如果正在加載的DLL使用清單來指定特定的DLL,請確保DLL(在清單中指定的版本)也在機器上(或者在GAC中,如果需要的話),並且可以找到

  • 檢查Java代碼中引用的所有DLL函數是否已正確定義並導出並導出與Java代碼所期望的相同的數據類型。這不會阻止DLL加載,但它可能會在下一階段搞亂 - 解決鏈接地址或使應該工作的函數以失敗的方式失敗。

很多有趣的事情可以用這個 - 很多小東西來絆倒你。幾年前,我不得不應對這個問題,使用不同版本的Java和新舊JNI樣式來處理文本到語音包(DLL中的C & C++)。真是一團糟!

1

我自己還沒有看到這個問題,但是從錯誤消息來看,它聽起來像是DLL所需的某些依賴項缺失或不正確的版本。

此工具可以幫助:http://www.dependencywalker.com/

5

我的公司,使你想使用該產品的工作。我們已經看到這個錯誤,當它被安裝在我們隨附的基礎層的不兼容版本上時,因爲像其他人所建議的那樣缺少依賴的DLL。請隨時聯繫我們的支持團隊獲取更多幫助。

0

對我來說,將dll路徑添加到我的IDE中的VM選項。

相關問題