hdf5安装指南(安装hdf5)

一、准备工作

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文件,则表明测试通过。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平