我在Linux Ubuntu 12.04上使用Matlab版本R2013b并且有一个Matlab应用程序,它取决于来自Java HDF5的HDFGROUP。我的问题是由两个文件jhdf5.jar
和libjhdf5.so
组成的JHDF5包装器似乎与Matlab中集成的HDF5库不兼容。
我的环境设置如下,即确保Matlab中的JAVA版本:
$ env | grep JAVA
MATLAB_JAVA=/opt/dev/java/1.7.0_55/jre
JAVA_HOME=/opt/dev/java/1.7.0_55
JAVA_VERSION=1.7.0_55
我从一个目录启动Matlab,我在其中设置了以下两个文件来设置JHDF5库:
java.opts
-XX:MaxPermSize=256m
-Xmx4091m
-Xms2048m
-Dncsa.hdf.hdf5lib.H5.hdf5lib=/opt/dev/jhdf5/2.7/lib/linux/libjhdf5.so
javaclasspath.txt
/opt/dev/jhdf5/2.7/lib/jhdf5.jar
...
从Matlab内部我得到以下内容(意思是我有HDF5版本1.8.6以及其他所有内容,即根据需要设置JRE和JHDF5):
>> [maj,min,relnum] = H5.get_libversion
maj =
1
min =
8
relnum =
6
>> java.lang.System.getProperty('ncsa.hdf.hdf5lib.H5.hdf5lib')
ans =
/opt/dev/jhdf5/2.7/lib/linux/libjhdf5.so
>> version -java
ans =
Java 1.7.0_55-b13 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
但是当我尝试运行一个简单的命令时,例如创建ncsa.hdf.hdf5lib.H5
的实例或者只是从Matlab命令行访问它,Matlab崩溃
>> ncsa.hdf.hdf5lib.H5 % crashes Matlab
我有时会在控制台中看到以下错误:
HDF5-DIAG: Error detected in HDF5 (1.8.6) thread 0:
#000: H5Edeprec.c line 186 in H5Eget_minor(): not a error message ID
major: Invalid arguments to routine
minor: Inappropriate type
总结一下,我有以下版本: