2

Mathematica から J/Link 経由で Java メソッドを動作させようとしています。問題は、メソッドが JNI (.dll ファイル) を呼び出すことです。コマンドラインから Mathematica の外では、すべてがうまく機能します。しかし、Mathematica 内でメソッドを呼び出すと、JVM は次を返します。

Java::excptn: A Java exception occurred: java.lang.UnsatisfiedLinkError: ncsa.hdf.hdf5lib.H5.H5Fcreate(Ljava/lang/String;III)I
    at ncsa.hdf.hdf5lib.H5.H5Fcreate(Native Method)
    at ncsa.hdf.object.h5.H5File.createFile(H5File.java:920)
    at H5FileCreateFromMathematica.H5FileCreate(H5FileCreateFromMathematica.java:38).

私は、さまざまな順列でクラスパスとパスを使用してすべてを正しくするために多くの時間を費やしてきました。これはまだ問題かもしれませんが、これらの可能性を排除するために一生懸命働いたと思います.

(1) Java からのこのメッセージの意味、さらには (2) 修正方法についての洞察をいただければ幸いです。

  • 編集: Artefacto の非常に役立つ提案を実装した後の詳細情報 * Artefacto の入力の結果は、エラー メッセージの変更です。最初の呼び出しで、fileFormat@create["C:\Test"] は次の結果をもたらします。

Java::excptn: A Java exception occurred: java.lang.UnsatisfiedLinkError: Native Library C:\MyJava\hdf-java\lib\win\jhdf5.dll already loaded in another classloader at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1772) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1028) at ncsa.hdf.hdf5lib.H5.<clinit>(H5.java:232) at ncsa.hdf.object.h5.H5File.createFile(H5File.java:920) at ncsa.hdf.object.FileFormat.create(FileFormat.java:1472).

すぐに再度呼び出すと、 fileFormat@create["C:\Test"] は次のようになります。

Java::excptn: A Java exception occurred: java.lang.NoClassDefFoundError: Could not initialize class ncsa.hdf.hdf5lib.H5 at ncsa.hdf.object.h5.H5File.createFile(H5File.java:920) at ncsa.hdf.object.FileFormat.create(FileFormat.java:1472).

これらの変更の解釈と、Mathematica でこれを機能させるために何を意味するのでしょうか?

4

2 に答える 2

2

Java はネイティブ ライブラリを探していますが、見つかりません。以下にリンクされているフォーラムの投稿によると、「com.wolfram.jlink.libdir」システム プロパティまたは JLINK_LIB_DIR 環境変数を設定する必要があります。これは、JLink自体を探す場所を設定している可能性があるため、Mathematica インストールレイアウトでJLinkNativeLibrary.dllファイルが存在する場所に必要なライブラリを配置しようとする場合もあります.

これは関連するフォーラム スレッドです: http://forums.wolfram.com/mathgroup/archive/2008/Aug/msg00664.html

于 2011-06-26T01:12:19.983 に答える
2

次のように、コマンド ラインで JVM に dll ディレクトリのパスを渡してみてください。

InstallJava[CommandLine-> "c:\\path\\to\\java.exe -Djava.library.path=c:\\path\\to\\libdirectory"]

次に呼び出しますRuntime.getRuntime().loadLibrary("mylib");

LoadJavaClass["java.lang.Runtime"];
runtime = java`lang`Runtime`getRuntime[];
process = runtime@loadLibrary["mylib"];
于 2011-06-26T01:13:23.727 に答える