C++ 如何读取LZF压缩的HDF5数据集?

C++ 如何读取LZF压缩的HDF5数据集?,c++,hdf5,lzf,C++,Hdf5,Lzf,我正在尝试读取具有以下属性的数据集: 我正在使用适用于Visual Studio 2017的HDF5编译静态库。我主要使用C++ API,对读取非压缩数据集没有问题。在这种情况下,我应该如何读取LZF压缩数据集?您需要构建LZF筛选器并使其可供HDF5使用。 有一些关于如何做到这一点的信息 基本上,您需要克隆h5py repo,将lzf过滤器构建为共享库,然后将其放入/usr/local/hdf5/lib/plugin中,还可以选择将环境变量指向该位置: git clone https://g

我正在尝试读取具有以下属性的数据集:


我正在使用适用于Visual Studio 2017的HDF5编译静态库。我主要使用C++ API,对读取非压缩数据集没有问题。在这种情况下,我应该如何读取LZF压缩数据集?

您需要构建LZF筛选器并使其可供HDF5使用。
有一些关于如何做到这一点的信息

基本上,您需要克隆h5py repo,将lzf过滤器构建为共享库,然后将其放入/usr/local/hdf5/lib/plugin中,还可以选择将环境变量指向该位置:

git clone https://github.com/h5py/h5py.git
cd h5py/lzf && gcc -O2 -fPIC -shared lzf/*.c lzf_filter.c -o liblzf_filter.so
mkdir -p /usr/local/hdf5/lib/plugin
cp liblzf_filter.so /usr/local/hdf5/lib/plugin

然后可以使用h5dump dataset.hdf5对其进行测试。如果lzf过滤器被正确检测并加载,它应该转储压缩数据集的内容。如果没有,它将显示错误。

您能告诉我如何静态链接h5py/lzf和HDF5吗?在ReadMe上,它说
gcc-O2 lzf/*.c lzf_filter.c myprog.c-lhdf5-o myprog
,但我不确定如何将其与HDF5源代码静态链接。我认为不需要将lzf过滤器专门链接到您的静态二进制文件。只要按照自述文件中的描述编译lzf过滤器并将其放入正确的位置(/usr/local/hdf5/lib/plugin)就足够了,然后使用hdf5的二进制文件应该能够读取lzf压缩数据集,因为hdf5将动态加载lzf过滤器插件。尝试在lzf conpressed数据集上运行h5dump。如果没有插件,您将得到一个错误。使用插件,它应该显示数据集的内容。