介紹如何在 Linux 系統上開發與編譯 C/C++ 語言的 HDF5 程式。
基本 HDF5 開發環境
若要在 Ubuntu Linux 環境中以 HDF5 函式庫開發 C 或 C++ 的應用程式,除了安裝 gcc 編譯器之外,還要安裝 HDF5 的函式庫與編譯工具套件,這兩個可以使用 apt 來安裝:
# 安裝 HDF5 函式庫與編譯工具套件
sudo apt install libhdf5-dev hdf5-helpers
編譯 C 語言 HDF5 程式
這是 HDF Group 官方網站上建立資料集範例的 C 語言程式碼:
#include <hdf5.h>
int main() {
hid_t file_id, dataset_id, dataspace_id; /* 識別碼 */
hsize_t dims[2];
herr_t status;
/* 以預設屬性建立新的 HDF5 檔案 */
file_id = H5Fcreate("output.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
/* 建立資料空間 */
dims[0] = 4;
dims[1] = 6;
dataspace_id = H5Screate_simple(2, dims, NULL);
/* 建立 HDF5 資料集 */
dataset_id = H5Dcreate2(file_id, "/dset", H5T_STD_I32BE, dataspace_id,
H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
/* 關閉資料集,釋放相關資源 */
status = H5Dclose(dataset_id);
/* 關閉資料空間 */
status = H5Sclose(dataspace_id);
/* 關閉檔案 */
status = H5Fclose(file_id);
return 0;
}
將這段程式碼儲存為 h5_crtdat.c 之後,再以 h5cc 這個 HDF5 專用的 C 語言編譯工具進行編譯即可:
# 編譯 HDF5 C 語言程式
h5cc h5_crtdat.c
h5cc 實際上只是一個 shell 指令稿,它會自動設定好編譯 HDF5 程式所需要的參數,再呼叫 gcc 進行編譯,所以一般 gcc 可接受的參數在這裡都可以直接使用。
編譯 C++ 語言 HDF5 程式
以下是一段 C++ 的 HDF5 範例程式碼:
#include <iostream>
#include <string>
#include <H5Cpp.h>
using namespace H5;
int main (void) {
// 以預設屬性建立新的 HDF5 檔案
H5File file("output.h5", H5F_ACC_TRUNC);
// 建立資料空間
hsize_t dims[2];
dims[0] = 4;
dims[1] = 6;
DataSpace dataspace(2, dims);
// 建立 HDF5 資料集
DataSet dataset = file.createDataSet("dset", PredType::STD_I32BE, dataspace);
return 0;
}
將這段程式碼儲存為 h5_crtdat.cpp 之後,再以 h5c++ 這個 HDF5 專用的 C++ 語言編譯工具進行編譯即可:
# 編譯 HDF5 C++ 語言程式
h5c++ h5_crtdat.cpp
h5c++ 跟 h5cc 類似,也是一個包裝編譯器的指令稿,只不過它是呼叫 g++ 進行編譯。
CMake 編譯 C++ 語言 HDF5 程式
若要以 CMake 編譯 C++ 語言的 HDF5 程式,要先安裝好 CMake 這個編譯工具,在 Ubuntu Linux 中可用 apt 安裝:
# 安裝 CMake
sudo apt install cmake
接著要準備 C++ 的 HDF5 程式原始碼,這部分我們直接使用上面的 h5_crtdat.cpp 作為示範。
除了 C++ 程式碼之外,還需要撰寫一個 CMakeLists.txt 這個 CMake 用的設定檔,以下是一個最簡單的範例:
cmake_minimum_required(VERSION 3.1.0)
PROJECT (h5_crtdat)
find_package(HDF5 REQUIRED COMPONENTS C CXX)
include_directories(${HDF5_INCLUDE_DIRS})
add_executable( h5_crtdat h5_crtdat.cpp )
target_link_libraries( h5_crtdat ${HDF5_CXX_LIBRARIES} ${HDF5_LIBRARIES})
將 h5_crtdat.cpp 與 CMakeLists.txt 放在相同目錄之下,然後建立一個編譯用的 build 目錄,在其中進行編譯:
# 建立編譯用目錄
mkdir build
# 進入編譯用目錄
cd build
# 以 CMake 建立編譯環境
cmake ..
# 進行編譯
make
編譯完成後,產生的執行檔 h5_crtdat 就放在 build 目錄下,可直接執行觀看執行結果:
# 執行程式
./h5_crtdat
