web-dev-qa-db-ja.com

UnsatisfiedLinkError-ライブラリをロードできません-リソースパスにネイティブライブラリが見つかりません

Tess4Jを実行しようとしたときに、実行時に次のエラーが発生しました。

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)どうしてDLL name with win32-x86-64/が前置されているように見えるのですか?私はこれをどこにも設定していません。このAPIの標準プレフィックスですか?

5)「リソースパス」とは何ですか?設定方法は?

12
Suzan Cioc

エラーが言うように、それは_win32-x86-64/libtesseract302.dll_で_Java.class.path_を探しています。クラスパスの一部に明らかに_myproject/target/classes_が含まれています。

プレフィックスは、ロードされる共有ライブラリのプラットフォームとアーキテクチャを表します。これにより、異なるターゲットの共有ライブラリを同じアーカイブに含めることができます。 JNAがシステムロードパスで要求されたライブラリ名を見つけられない場合、リソースパス内でそれを見つけようとします(必要に応じて抽出します)。したがって、DLLをjarファイルに入れる場合は、ロードするために_win32-x86-64_プレフィックスを付ける必要があります。

「リソースパス」は、名目上はクラスパスです。基本的にClassLoader.getResource()で到達可能な場所。

6
technomage

エラーは、64ビットJVMで32ビットDLLをロードしようとしたことが原因です。可能な解決策は、32ビットJVMに切り替えることです。または、 64ビットTesseractおよびLeptonica DLL を使用します。

5
nguyenq

同じ問題があり、次の行でソートされました

System.load( "/ usr/local/lib/liblept.so.5")

System.loadLibrary( "tesseract")

あなたの場合、それは異なるライブラリかもしれませんが、最終的にはほとんど同じです:手動で必要なライブラリをロードするだけです。

4
Painy James

JNA API _http://www.Java2s.com/Code/Jar/j/Downloadjna351jar.htm_を使用してネイティブライブラリをロードしないのはなぜですか?プロジェクトのクラスパスに入れたら、このコードを追加します

NativeLibrary.addSearchPath("libtesseract302", "your native lib path");このlibtesseract302.dllファイルがあることを確認してください。通常、このファイルは_windows32_フォルダーにあります。

たとえば、libtesseract302.dllファイルがどこか_c:/abcv/aaa/libtesseract302.dll_にある場合は、次のようにパスを設定するだけですNativeLibrary.addSearchPath("libtesseract302", "c:/abcv/aaa");

ウィンドウパスが_c:/abcv/aaa_または_c:\\abcv\\aaa\\_のように見えるかわかりません

より簡単な方法が必要な場合は、必要なすべてのdllファイルをwindows32フォルダーに置くだけで、JVMが処理します。

別の問題として、アプリケーションを正しくインストールしていないか、アプリケーションのバージョンがjarのバージョンと一致していない可能性があります。最新のアプリケーションをインストールし、最新のjarをダウンロードして再試行してください。それが役に立てば幸い :)

3
taymedee

私は上記のすべての答えを試して同様の問題に直面していましたが、私の問題は解決されませんでしたそれをインストールしたら、例外はなくなりました。

1
deepak kumar

数日前、CNAをロードしようとしたときに同じエラーメッセージに遭遇しましたDLL JNAで。原因が見つからないことが原因であることがわかりましたDLL my DLLによって異なります。

私の場合、それはMS Visual Studio 2012再頒布可能パッケージでした。それをマシンにダウンロードしてインストールしたところ、問題は解決しました。 Dependency Walkerを使用して、不足しているライブラリを見つけてインストールします。

1

同じ問題があり、この「リソースパス」が「ネイティブディレクトリパス」によって設定されていないことがわかりました。
ただし、このフォルダーにクラスファイルが含まれておらず、ネイティブライブラリファイル(DLLなどウィンドウズ)

1
user2759511