私はjnaと連携してdllをロードするJavaプログラムを持っています。私の開発コンピュータでは、プログラムは問題なく実行されます。しかし、私は別のPC上でプログラムを実行すると、私は、プログラムが依存ファイルdllを見つけることができないというエラーを取得します。しかし、私のdllは、このdllが同じフォルダの中にある1つのdllだけに依存しています。JNA PC上のさまざまな動作
私はWindows 7でjarとしてプログラムを実行します。依存関係ウォーカーは、両方のPCで同じ依存関係を示しています。
私はこれらのコンピュータの問題点や相違点を知りません。
なぜプログラムはDLLをロードできませんか?
エラーメッセージ:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\THZ-standalone\Dlls\BladeTileLocator.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at de.thz.cameracontrol.utils.Utils.loadLibrary(Utils.java:169)
at de.thz.cameracontrol.server.Server.<init>(Server.java:124)
at de.thz.cameracontrol.server.Server.main(Server.java:165)
は私がProgram.jar -jarのjavaでプログラムを呼び出します。 dllはフォルダに保存されます(このフォルダはjavaプログラムと同じフォルダにあります)。ここ
はlibrayローディングするための方法である:
public static Object loadLibrary(String libraryName, Class<?> clazz) {
final String userDir = System.getProperty("user.dir");
final String filePathToUse = userDir + "\\" + DLL_PATH;
System.setProperty("jna.platform.library.path", filePathToUse);
System.load(filePathToUse + libraryName + ".dll");
return Native.loadLibrary(libraryName, clazz);
// return Native.loadLibrary(libraryName, clazz);
}
Iステートメントは、System.load(filePathToUse + LIBRARYNAME + "の.dll")を使用します。より良いエラーメッセージを表示します。
DLLが格納されているフォルダ内からプログラムを呼び出していますか?保存されているものと実行方法について詳細な情報を提供してください。例外メッセージとは何ですか? – SubOptimal
私は追加情報を提供しています。 – Freewister
** 1)** JNAライブラリがDLLを探している場所の情報を取得するには、 '-Djna.debug_load = true -Djna.debug_load.jna = true'でアプリケーションを起動してください。 ** 2)** 'jna.platform.library.path'ではなく' jna.library.path'でなくてはなりません。 ** 3)** 32ビット/ 64ビットのDLL/JVMを混在させているのでしょうか? – SubOptimal