2011-06-26 31 views
2

我想通過J/Link從Mathematica獲得Java方法。問題是該方法調用一個JNI(.dll文件)。在命令行的Mathematica之外,所有的工作都很好。但呼籲在Mathematica的方法,在JVM返回如下:Mathematica,J/LINK,JNI,.dll

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)如何解決它將不勝感激。

  • 編輯:更多的信息,implemeneting Artefacto的非常有益的建議* Artefacto的輸入結果後錯誤消息的變化。在第一次通話,FILEFORMAT @創建[ 「C:\測試」]產量:

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 @創建[ 「C:\測試」]產量:

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中的工作意味着什麼?

+0

這個問題解決了嗎? –

回答

2

Java正在尋找本機庫,但沒有找到它。根據下面鏈接的論壇帖子,您應該設置「com.wolfram.jlink.libdir」系統屬性或JLINK_LIB_DIR環境變量。這可能會配置它應該在哪裏查找JLink本身,因此您可能還會嘗試將所需的庫放在JLinkNativeLibrary.dll文件位於Mathematica安裝佈局中的位置。

這是相關的論壇主題: http://forums.wolfram.com/mathgroup/archive/2008/Aug/msg00664.html

+0

感謝Joshua,感謝MathGroup的鏈接。我面臨的問題與那個不同。也就是說,關於JLinkNativeLibrary(Mathgroup討論)的錯誤消息涉及作爲標準Mathematica-Java通信的一部分引導JLink。這部分對我來說很好。我的問題與讓JVM找到我的應用程序的本地庫有關。對於任何想要進一步追蹤此線索的人,我將在此處發佈更多信息:http://www.java-forums.org/advanced-java/45748-jni-java-mathematica.html#post217930 – user815784

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 = [email protected]["mylib"]; 
+0

非常有幫助的回覆,我試了一下。我特別感謝你可以把它變成Mathematica格式(!)。在上面的原始信息中看到效果。 – user815784