2016-05-03 25 views
0

私が使用しようとしている:32ビットJVMの実行に(Visual Studioの2015年に建て)ます。java.lang.UnsatisfiedLinkError:ライブラリをロードできません(Visual Studioの2015ビルドで)

  1. 32ビットのDLLをアプリケーションは、Windows 7の64ビットマシン上で

  2. 64ビットのDLLのWindows 7 64ビットマシンで、64ビットのJVMで動作しているアプリケーション上(のVisual Studio 2015で構築された)

DLLが持っています提供されるものは少ない私はjna.library.pathをすべての必要な依存関係を含むフォルダに設定しているので、jnaはそれらを見つけることができるはずです。また、DLLとその依存関係を含むフォルダを 'java.library.path'に追加して、それらが見つかったことを確認しました。

  • 私はライブラリを含むディレクトリから自分のアプリケーションを起動した場合、それは何の問題もなく動作します。どちらの場合も

    は、残念ながら、私は考慮すべき

    java.lang.UnsatisfiedLinkError: Unable to load library.

    他のいくつかのポイントを獲得します。 これは、読み込みのDLL検索パスに問題があることを示していますか?

  • 私は以前にVisual Studio 2010でライブラリを構築していましたが、問題なくライブラリをロードできました。 これはDLLのビルドに問題がありますか?

何が問題なのでしょうか?

私は 'jna.debug_load'と 'jna.debug_load.jna'を有効にしていますが、ログには正しいパスが試されてもロードは失敗していることが示されます(私は両方のシナリオで正しいlib C:\ path \ to \ my \ lib [32/64] \ xxx.dll)から入手できます。次のログは32ビットのDLLのロード用ですが、64ビットのDLLではまったく同じ結果になります。

...snip... 
Trying (via loadLibrary) jnidispatch 
Looking in classpath from ...[...] for x86/jnidispatch.dll 
Found library resource at bundleresource://449.fwk22856250/com/sun/jna/win32-x86/jnidispatch.dll 
Trying C:\...snip...\AppData\Local\Temp\jna--892366855\jna1523529206075569309.dll 
Found jnidispatch at C:\...snip...\AppData\Local\Temp\jna--892366855\jna1523529206075569309.dll 
Looking for library 'xxx' 
Adding paths from jna.library.path: C:/path/to/my/lib32 
Trying C:\path\to\my\lib32\xxx.dll 
Adding system paths: [] 
Trying C:\path\to\my\lib32\xxx.dll 
Looking for lib- prefix 
Trying libxxx.dll 
Looking in classpath from ...[...] 
... 
java.lang.UnsatisfiedLinkError: Unable to load library 'xxx': Native library (win32-x86/xxx.dll) not found in resource path... 
...snip... 
+0

*これは、DLL検索パスに問題があることを示していますか?*はい。そのフォルダを['java.library.path']に追加してください(http://stackoverflow.com/a/1734214/2970947)。 –

+0

私はあなたに同意する傾向がありますが、説明の中のその詳細は忘れていました。DLLと依存関係を含むフォルダは、 'jna.library.path'と 'java.library.path'の両方の先頭に連結されています。それでも、それは動作しません。私は何か他のものを逃すことができますか? –

+0

そのフォルダをあなたの 'PATH'に追加しようとすると、WoW32とリンカで何か起こっているかもしれません(しかし、私は何が何か分かりません)。 –

答えて

0

java.library.path VMの起動時にPATHから派生しています。 java.library.pathはシステムの動作に影響しません。これは、JVMがネイティブライブラリのロードを最初に試行する場所を指示する場合にのみ使用されます。

システム自体はPATHを使用して、初期ロードだけでなくすべての依存関係についても検索を通知します。 JNAがネイティブライブラリをロードする上でJNAが持つ唯一のコントロールは、検索パスにターゲットDLLのディレクトリを依存関係に含めるかどうかです。

関連する問題