2012-01-19 4 views
2

私の問題:C++ DLL用のJavaラッパーを作成しています。 私は知っている、この問題については多くの記事がありますが、今のところ解決策はありません。 問題: C:\ java \ jdkに私のW​​indows 7,64ビットに29の32ビット版をインストールしました。 このパスはpath変数の一部です(どこでもcmdacを呼び出してください...)。SWIG C++ Java DLL Windows

最新のswigがあり、私のDLL用のPythonとPerlラッパーを正常に作成しました。

私はVS2008でのJava /クラスサンプルbuldた場合 - エラーなしで完了 - とrunme.javaを実行しようと、私はエラーを取得:

ないUnsatisfiedLinkError

- >ネイティブコードライブラリをロードできませんでした。ヘルプについては、SWIGのJavaドキュメントのダイナミックリンクの問題に関する章を参照してください。

DLLは非常に簡単です。ランタイムライブラリ(/ MT)に静的にリンクされています。依存関係はありませんが、まだ このエラーが発生しています。

注意:swigサンプルは機能しません。 Javaがインストールされている。また、tclサンプルは動作しません。 tcl 8.4がインストールされています(同様のエラー)。

何か助けていただければ幸いです。 ありがとうございます

+0

DLLは32ビットまたは64ビットですか? –

答えて

1

クラスが正常にコンパイルされ、ネイティブライブラリが正常にコンパイルされました。問題は、JavaコードがVisual Studioで生成した共有オブジェクトを実行時にロードする必要があることです。

クラスを実行するときに-Djava.library.path=<directory containing your DLL>を渡してみてください。

+0

こんにちは、ありがとうございました。私はJavaの初心者です。すべての.java、すべての.classおよびdllは同じディレクトリにあります。私はコマンドラインからすべてを実行し、ちょうど別のDLLをロードする単純なJavaクラスを試しました。ちょうどload(loadLibrary(dllname))。これはうまくいった。それは何とかswigに関連していなければなりません。 – user947604

+0

@ user947604:SWIGは、C++ファイルとJavaファイルの2つのコードを生成します。 C++ファイルをDLLにコンパイルします。次に、Javaファイルを.classにコンパイルします。最後にJavaクラスを実行しますが、作成したDLLは 'java.library.path'になければなりません。 – Borealid

+0

java jdkはc:\ java \ jdkにインストールされています。このパスの場所を調べる方法を教えてください。 – user947604

0

あなたが説明したように、(SWIGによって生成された)JNIメソッドの1つを呼び出す前に、JavaでコンパイルしたDLLをロードしていないようです。 DLLは、Javaコードによって実行時に自動的にロードさせるように、私のSWIGインタフェースファイルに

%pragma(java) jniclasscode=%{ 
    static { 
    try { 
     System.loadLibrary("module"); 
    } catch (UnsatisfiedLinkError e) { 
     System.err.println("Native code library failed to load. \n" + e); 
     System.exit(1); 
    } 
    } 
%} 

は、私は普通のようなものを使用します。

(システムのライブラリパスに関して、DLLが適切な場所に配置されていることを確認する必要があります)。

関連する問題