C/C++

Linux 編譯 C/C++ 語言 HDF5 程式教學與範例

介紹如何在 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.cppCMakeLists.txt 放在相同目錄之下,然後建立一個編譯用的 build 目錄,在其中進行編譯:

# 建立編譯用目錄
mkdir build

# 進入編譯用目錄
cd build

# 以 CMake 建立編譯環境
cmake ..

# 進行編譯
make

編譯完成後,產生的執行檔 h5_crtdat 就放在 build 目錄下,可直接執行觀看執行結果:

# 執行程式
./h5_crtdat

參考資料:HDF GroupCMakeHDF Group

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

10 個月 ago