2014-11-01 56 views
1

我有一個JNI dll以及一個在eclipse上創建的jar文件。JNI UnsatisfiedLinkError依賴庫

我想這個部署到另一臺機器,不能讓過去的例外

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\CcmAccess\CcmJNIBase.dll: Can't find dependent libraries 
     at java.lang.ClassLoader$NativeLibrary.load(Native Meth 
     at java.lang.ClassLoader.loadLibrary1(Unknown Source) 
     at java.lang.ClassLoader.loadLibrary0(Unknown Source) 
     at java.lang.ClassLoader.loadLibrary(Unknown Source) 
     at java.lang.Runtime.loadLibrary0(Unknown Source) 
     at java.lang.System.loadLibrary(Unknown Source) 
     at com.sig.ccm.CcmBase.<clinit>(CcmBase.java:8) 
     at ReadTimeDomain.setupSample(ReadTimeDomain.java:24) 
     at ReadTimeDomain.main(ReadTimeDomain.java:97) 

我還有一個程序,打印出的java.library.path和我已經驗證了這個dll依賴於DLL以及這個DLL在java.library.path中。

我已閱讀帖子,他們應該在當前目錄中,並且不起作用。

我已閱讀帖子,他們應該去在jre /斌,並得到相同的結果。

任何幫助,將不勝感激。

編輯:

如果我把所有的東西的路徑,並迫使classpath中只有jar文件和「」我得到的消息

Exception in thread "main" java.lang.UnsatisfiedLinkError: no CcmJNIBase in java.library.path 

當我加入這個DLL的位置到路徑C:\ CcmAccess我得到完整的信息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\CcmAccess\CcmJNIBase.dll: Can't find dependent libraries 

在機器上,這似乎工作我不得不要做的是添加相關的DLL到我的類路徑。

+0

你在java.library.path中使用絕對路徑嗎? – gmarintes 2014-11-01 20:39:02

回答

0

仔細檢查您的java.library.path值。 確保您使用的是絕對路徑。 相對路徑會讓你認爲你的java.library.path是正確的,但實際上它實際上是不正確的。

如果您要添加「。」在你的java.library.path中,當你執行你的代碼時,你需要仔細檢查「當前工作目錄」。

如果您需要在java.library.path中使用相對路徑,請確保在執行代碼時路徑與「工作目錄」相對。

+0

我只使用絕對路徑。我有明確命名的路徑上的JNI dll,我有它在路徑中命名的目錄。 java.library.path的最後一個元素是「。」。 – Sting 2014-11-01 21:05:11

+0

JNI dll和本機dll在同一個目錄下。我已經嘗試明確地命名它們中的每一個,但這沒有幫助。仔細檢查「當前工作目錄」是什麼意思? – Sting 2014-11-01 21:07:20

+0

如果消息是C:\ CcmAccess \ CcmJNIBase.dll:找不到依賴庫。它在尋找CcmJNIBase還是它依賴的dll? – Sting 2014-11-01 21:10:36