一、准备工作
1、确认系统环境是否支持:
uname -a
若出现类似“Linux xxxxx 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux”的输出信息,则表明支持。若不支持,则需升级内核版本。
2、确认需要的依赖库是否安装:
sudo apt-get update
sudo apt-get install build-essential libjpeg-dev libtiff-dev libszip-dev libxml2-dev
若出现类似“已经最新版本,不需要更新”的信息,则表明该依赖库已安装。若未安装,则需执行对应的安装命令。
3、确认安装路径:
mkdir -p /usr/local/hdf5
也可以根据实际情况进行修改,但需保证路径存在且具有读写权限。
二、下载hdf5
1、前往hdf5官网(https://support.hdfgroup.org/downloads/)下载需要的版本。本文以hdf5-1.12.1为例。
2、将下载的文件解压:
tar -xzvf hdf5-1.12.1.tar.gz
三、配置并编译
1、进入解压后的目录:
cd hdf5-1.12.1
./configure --prefix=/usr/local/hdf5 --enable-shared --enable-hl --enable-production --enable-static-exec
其中,–enable-shared、–enable-hl、–enable-production、–enable-static-exec分别代表启用共享库、启用高级功能、启用产品模式、启用静态执行。
若有额外的需要,可根据实际情况添加其他参数。
2、编译:
make
若有多核处理器,则可以添加-j参数以提高编译效率。如:
make -j16
3、安装:
make install
若出现权限不足等问题,则需以管理员身份执行。
四、测试
1、编写测试程序:
// test.c
#include "hdf5.h"
#include "stdio.h"
#define FILENAME "test.h5"
#define GROUPNAME "test_group"
#define DATASETNAME "test_dataset"
int main() {
hid_t file_id, group_id, dataset_id, dataspace_id, datatype_id;
hsize_t dims[2] = {2, 3};
int data[2][3] = {{1, 2, 3}, {4, 5, 6}};
herr_t status;
file_id = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
if (file_id < 0) {
printf("Failed to create filen");
return -1;
}
group_id = H5Gcreate2(file_id, GROUPNAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if (group_id < 0) {
printf("Failed to create groupn");
H5Fclose(file_id);
return -1;
}
dataspace_id = H5Screate_simple(2, dims, NULL);
if (dataspace_id < 0) {
printf("Failed to create dataspacen");
H5Gclose(group_id);
H5Fclose(file_id);
return -1;
}
datatype_id = H5Tcopy(H5T_NATIVE_INT);
if (datatype_id < 0) {
printf("Failed to copy datatypen");
H5Sclose(dataspace_id);
H5Gclose(group_id);
H5Fclose(file_id);
return -1;
}
dataset_id = H5Dcreate2(group_id, DATASETNAME, datatype_id, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if (dataset_id < 0) {
printf("Failed to create datasetn");
H5Tclose(datatype_id);
H5Sclose(dataspace_id);
H5Gclose(group_id);
H5Fclose(file_id);
return -1;
}
status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
if (status < 0) {
printf("Failed to write datan");
H5Dclose(dataset_id);
H5Tclose(datatype_id);
H5Sclose(dataspace_id);
H5Gclose(group_id);
H5Fclose(file_id);
return -1;
}
H5Dclose(dataset_id);
H5Tclose(datatype_id);
H5Sclose(dataspace_id);
H5Gclose(group_id);
H5Fclose(file_id);
return 0;
}
2、编译:
gcc test.c -o test -lhdf5
其中,-lhdf5表示链接hdf5库。
3、执行:
./test
若当前目录下出现test.h5文件,则表明测试通过。