2017-05-02 10 views
0

私は2つの外部ライブラリを持つJavaプロジェクトを持っています。 Eclipseですべてうまく動作します。実行可能なJARとしてエクスポートするときにエラーはありません。しかし、私がjava -jar myapplication.jar,を使ってコマンドラインでプロジェクトを実行すると、悪名高いjava.lang.UnsatisfiedLinkError: no in java.library.pathが投げられます。EclipseのエクスポートされたRunnable Jarが外部ライブラリの検索に失敗する

3つのエクスポートオプション(抽出、パッケージ、コピー)をすべて使用してみましたが、成功しませんでした。

System.loadLibraryのためには(使用日食)

答えて

1

()が動作するためには、(Windowsの、DLLの)ライブラリがあなたのPATH上またはJavaに記載されているパス上のどこかのディレクトリになければなりません。 library.pathシステム・プロパティー(java -Djava.library.path =/path/to/dirのようにJavaを起動できます)。

さらに、loadLibrary()の場合は、ライブラリのベース名を末尾に.dllなしで指定します。したがって、/path/to/something.dllに対しては、System.loadLibrary( "something")を使用するだけです。

また、取得している正確なUnsatisfiedLinkErrorを確認する必要があります。

スレッド "main"の例外java.lang.UnsatisfiedLinkError:java.library.pathのfooがありません PATHまたはjavaにfooライブラリ(foo.dll)が見つかりません。 .library.path。もしそれが何かのようなものを言うならば:

スレッド "main" java.lang.UnsatisfiedLinkError:com.example.program.ClassName.foo()の例外は、Javaがそうでないという意味でライブラリそのものに間違っていますアプリケーションのネイティブJava関数を実際のネイティブ関数にマップすることができます。

まず、System.loadLibrary()呼び出しをいくつかログに記録して、正しく実行されるかどうかを確認します。例外をスローするか、実際に実行されるコードパスにない場合は、上で説明したUnsatisfiedLinkErrorの後者の型が常に得られます。

+0

はいああ:追記として

、ほとんどの人は、それは常に一度だけ実行されることを保証するために、ネイティブメソッドを持つクラスの静的初期化子ブロックを呼び出します)(そのLoadLibraryのを置きます。私は言及するのを忘れた。私が使用しているライブラリはOpenCV + ntcoreです。生成されたjarには、 'ntcore.dylib'と' opencv_java320.dylib'があります。しかし何らかの理由でjarファイルがOpenCVライブラリを見つけられないようです。 – mccoyLBI

関連する問題