介紹如何在 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