2013-11-04 62 views
6

我已經在運行時出現以下錯誤,試圖運行Tess4J:UnsatisfiedLinkError - 無法加載庫 - 本地庫中的資源路徑沒有找到

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libtesseract302': Native library (win32-x86-64/libtesseract302.dll) not found in resource path ([myproject/target/classes/, ...some jars...]) 

我的問題是:

1)究竟它試圖找到和在哪裏?

2)爲什麼顯然搜索myproject/target/classes/目錄?我沒有設置它。

3)爲什麼它會忽略在Eclipse中用戶庫描述符中爲tess4j.jar設置的「本機目錄路徑」?我的DLL在那裏。如果它不忽略路徑,它會找到DLL。

4)爲什麼它顯然預先掛接了win32-x86-64/的DLL名稱?我沒有設置這個地方。這是一些API的標準前綴?

5)什麼是「資源路徑」?如何設置它?

回答

5

像錯誤說,它正在尋找win32-x86-64/libtesseract302.dlljava.class.path。部分類路徑顯然包括myproject/target/classes

前綴表示要加載的共享庫的平臺和體系結構,它允許將用於不同目標的共享庫包含在同一個存檔中。如果JNA在系統加載路徑中找不到所需的庫名稱,則它會嘗試在資源路徑中找到它(如果需要,將其解壓縮)。所以如果你把DLL放在一個jar文件中,你需要爲它加上win32-x86-64前綴。

「資源路徑」名義上是您的班級路徑;基本上任何地方都可以到達ClassLoader.getResource()

1

爲什麼不使用JNA API http://www.java2s.com/Code/Jar/j/Downloadjna351jar.htm加載本機庫?一旦你把你的項目類路徑,你添加此代碼

NativeLibrary.addSearchPath("libtesseract302", "your native lib path");請確保你有這個libtesseract302.dll文件,通常它位於windows32文件夾。

例如,如果在某個地方c:/abcv/aaa/libtesseract302.dll您libtesseract302.dll文件,那麼你剛纔設置的路徑是這樣NativeLibrary.addSearchPath("libtesseract302", "c:/abcv/aaa");

我不知道怎麼的Windows路徑看起來要麼c:/abcv/aaac:\\abcv\\aaa\\如果你想

更簡單的方法,只需將所有必需的dll文件放入windows32文件夾中,JVM就會處理它。

另一個問題可能是您沒有正確安裝應用程序,或者應用程序版本與您的jar版本不匹配。嘗試安裝最新的應用程序並下載最新的jar來重試。希望它有幫助:)

0

我有同樣的問題,並發現這個「資源路徑」不是由「本地目錄路徑」設置。
但是,您可以通過在庫選項卡使用「添加外部類文件夾」添加新文件夾到它,即使該文件夾不包含任何類的文件,但本地庫文件(如DLL在Windows上)

0

幾天在我嘗試使用JNA加載C++ DLL時,遇到了相同的錯誤消息。事實證明,原因是我的DLL依賴的缺少的DLL。

在我的情況下,它是MS Visual Studio 2012 redistributable,然後我下載並安裝在機器上,問題消失了。嘗試使用Dependency Walker找到任何缺失的庫並安裝它們。

1

有同樣的問題,通過下面的代碼

System.load( 「在/ usr/local/lib目錄/ liblept.so.5」)

的System.loadLibrary( 「正方體」 分類)

對於你的情況,它可能是不同的庫,但最後幾乎是相同的:只需手動加載你需要的庫。

相關問題