Mathematica, J / LINK, JNI, .dll - PullRequest
       22

Mathematica, J / LINK, JNI, .dll

2 голосов
/ 26 июня 2011

Я пытаюсь заставить метод Java работать через J / Link от Mathematica. Проблема в том, что метод вызывает 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).

Я потратил много времени, пытаясь все сделать правильно с помощью classpath и path в различных перестановках. Это все еще может быть проблема, хотя я чувствую, что я упорно трудился, чтобы исключить эти возможности.

Любое понимание (1), что означает это сообщение с Java, и даже лучше (2), как его исправить, будет очень цениться.

  • РЕДАКТИРОВАТЬ: ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ после реализации очень полезного предложения Артефакто * Результатом ввода Артефакто является изменение сообщения об ошибке. При первом вызове 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?

Ответы [ 2 ]

2 голосов
/ 26 июня 2011

Попробуйте передать 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"];
2 голосов
/ 26 июня 2011

Java ищет собственную библиотеку, но не находит ее.Согласно сообщению на форуме, указанному ниже, вы должны установить системное свойство "com.wolfram.jlink.libdir" или переменную среды JLINK_LIB_DIR.Это может быть настройка того, где должен искать сам JLink, поэтому вы можете также попытаться поместить нужную библиотеку, в которой находится файл JLinkNativeLibrary.dll, в установочный макет Mathematica.

Это связанная ветка форума: http://forums.wolfram.com/mathgroup/archive/2008/Aug/msg00664.html

...