2011-07-25 8 views
2

jnaでdllを読み込む際に問題があります。私は、Eclipse内のコードをデバッグすることができますが、私は私がエクスポートするときに例外を取得し、jarファイルとしてそれを実行します。jnaロードライブラリ

ます。java.lang.UnsatisfiedLinkError:それがない理由図書館SiUSBXp "

任意のアイデアをロードできませんjarファイルとして実行するとDLLが見つかりませんか?

ありがとう!!!!

public interface SiUSBXp extends StdCallLibrary { 
    byte SI_GetNumDevices(IntByReference numdevices); 
    byte SI_GetProductString(int deviceNum, byte[] productString, int options); 
    byte SI_Open(IntByReference numdevices); 
} 

static SiUSBXp INSTANCE; 

public static void main(String[] args) { 
    System.setProperty("jna.library.path","SiUSBXp.dll"); 
    HashMap<String, StdCallFunctionMapper> optionMap = new HashMap<String, StdCallFunctionMapper>(); 
    StdCallFunctionMapper myMapper = new StdCallFunctionMapper(); 
    optionMap.put(Library.OPTION_FUNCTION_MAPPER, myMapper); 
    INSTANCE = (SiUSBXp) Native.loadLibrary("SiUSBXp", SiUSBXp.class, optionMap); 
} 

------------------ EDIT ----------------------

dllはjarファイルと同じフォルダにあります

------------------編集2 ------------ ---------

私はWindows XPの中にそれを実行しようとしたし、それが動作します..しかし、それは、Windows 7(64ビット)

以内ません------ ------------ EDIT 3 --------------------- 私はこの問題を解決しました...それはインストールされたJavaのバージョンに起因しています...私はそれらをすべて削除し、その後Javaのx86バージョンをインストールしました...それは完全に働いた後

+0

DLLはどこにありますか? –

+0

jarから実行すると、SiUSBXp.dllはどこにありますか? – chance

答えて

4

DLLを入れて「現在のフォルダ」またはシステム変数PATHに入力するか、ハードコーディングの代わりに-Djna.library.path=(path to the dll)をVMスイッチとして使用します。

+1

jna.library.pathはPATHと同じ方法で検索されます。いずれかに記載されているパスにDLL名を含めないでください。 ネイティブライブラリをロードする前に、コード内にjna.library.pathを設定できます。 – technomage

+0

これがうまくいかない場合、試してみるべきことは何ですか?私は同じボートに乗っていて、JNAパスを設定することは役に立たない。 –

+0

Windowsでは、JNAは最初にjna.library.path上のDLLを検索します。これはPATHを検索するシステムにフォールバックします。 DLLが依存するDLLがいずれのパスにもないため、DLLが読み込まれないことがあります。これらの依存関係をトレースするには "depends.exe"を使用します。 – technomage

0

jna 3.3.0で奇妙な問題が発生しました。ライブラリを見つけられませんでした。jna 3.2.7を試してみてください。また、jna.library.pathのほかに、java.library.pathも設定することができます。そして、あなたがパスにライブラリ名を入れて、ライブラリが入っているフォルダではないかどうかは分かりません。 "。"に設定してみてください。

+0

JNAのドキュメントを読んで、推測や推測をソリューションとして推薦するのではなく、オプションを理解する方がよいでしょう。 – technomage

+0

@technomage:なぜライブラリが読み込まれていないのかという疑問からは分かりません。私は 'UnsatisfiedLinkError'と戦うのに役立つ2つのことを提案しました。はい、それは推測ですが、なぜあなたはそれがとても悪いと思いますか? –