我接受Ramashalanka的回答,因为它让我找到了确切的解决方案,我将在这里发布,只是为了完整:
-
从hdf5网站下载hdf5-1.6.5库,将头文件安装到本地目录中;
-
告诉Mex在本地目录中查找“hdf5.h”,而不是在标准位置(例如
/usr/include
)
-
告诉Mex编译我的代码
以及Matlab提供的共享对象库
,然后做
不
使用
-ldfh5
旗在
LDFLAGS
.
我使用的命令基本上是:
/opt/matlab/matlab_default/bin/mex -v CC#gcc CXX#g++ CFLAGS#"-Wall -O3 -fPIC -I./hdf5_1.6.5/src -I/usr/include -I/opt/matlab/matlab_default/extern/include" CXXFLAGS#"-Wall -O3 -fPIC -I./hdf5_1.6.5/src -I/usr/include -I/opt/matlab/matlab_default/extern/include " -O -lmwblas -largeArrayDims -L/usr/lib64 hdf5_read_strings.c /opt/matlab/matlab_default/bin/glnxa64/libhdf5.so.0
这将由MEX转换为以下命令:
gcc -c -I/opt/matlab/matlab75/extern/include -DMATLAB_MEX_FILE -Wall -O3 -fPIC -I./hdf5_1.6.5/src -I/usr/include -I/opt/matlab/matlab_default/extern/include -O -DNDEBUG hdf5_read_strings.c
gcc -c -I/opt/matlab/matlab75/extern/include -DMATLAB_MEX_FILE -Wall -O3 -fPIC -I./hdf5_1.6.5/src -I/usr/include -I/opt/matlab/matlab_default/extern/include -O -DNDEBUG /opt/matlab/matlab75/extern/src/mexversion.c
gcc -O -pthread -shared -Wl,--version-script,/opt/matlab/matlab75/extern/lib/glnxa64/mexFunction.map -Wl,--no-undefined -o hdf5_read_strings.mexa64 hdf5_read_strings.o mexversion.o -lmwblas -L/usr/lib64 /opt/matlab/matlab_default/bin/glnxa64/libhdf5.so.0 -Wl,-rpath-link,/opt/matlab/matlab_default/bin/glnxa64 -L/opt/matlab/matlab_default/bin/glnxa64 -lmx -lmex -lmat -lm -lstdc++
这个解决方案应该适用于我所有的目标机器,至少直到我升级到Matlab R2009A,我相信它使用HDF5-1.8。感谢所有的帮助,很抱歉我对这一点过于关注——我认为我过度致力于使用打包版本的HDF5,而不是使用本地头文件集。
注意,如果MathWorks提供了一组头文件和matlab分发版的话,这一切都是微不足道的。