2016-03-24 17 views
0

私は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")を使用します。より良いエラーメッセージを表示します。

+0

DLLが格納されているフォルダ内からプログラムを呼び出していますか?保存されているものと実行方法について詳細な情報を提供してください。例外メッセージとは何ですか? – SubOptimal

+0

私は追加情報を提供しています。 – Freewister

+1

** 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

答えて

1

問題の原因は、JNAライブラリパスシステムプロパティの名前が間違っていました。正しい名前はjna.library.pathです。

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を混在していますか?

関連する問題