HDF5のインストール手順(暫定版)

時系列データの管理手段として用いられるC++ライブラリであるHDF5の導入を検討してみた。

予想以上に面倒で驚く。ググると日本語のサイトも見つかるし、もっとパッケージ化されて簡単に使えるかと思いきや、そんなこともなかったらしい。ソースからコンパイルしようとした自分が悪いのか。でもデフォルトだとC言語のみらしいし仕方ないのか…。

 

ソースコードの最新版をダウンロードして解凍する。

The HDF Group - Information, Support, and Software

 

./configure --prefix=$HOME/local --enable-cxx --enable-fortran

インテルコンパイラを使用可能にしようとしたが、とりあえずは最低限これだけの設定とした。

make

makecheck

sudo make install

 

以上、エラーもなく正常にインストール完了。しかしmakefileの書き方がわからない。

下記サイトのサンプルコードのコンパイルに失敗。

HDF5フォーマットに関するメモ書き - たまに書きます

 

下記サイトを参考に-showコマンドでh5c++を解読する。

H5Cpp.hを使ってみる - bettamodokiのメモ

 

h5c++ -show hogehoge.cpp

と打つと下記の内容が出てきた。

 

 g++ -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/$HOME/local/include hogehoge.o -L/$HOME/local/lib $HOME/local/lib/libhdf5_hl_cpp.a $HOME/local/lib/libhdf5_cpp.a $HOME/local/lib/libhdf5_hl.a $HOME/local/lib/libhdf5.a -lz -ldl -lm -Wl,-rpath -Wl,$HOME/local/lib

 

同じコンパイルオプションをmakefileにそのまま書いて、g++でなく、iccでも正常に動作を確認。一応は動いたようだが、しかし長ったらしいオプションはどうにかならないか。

.bashrcにCPLUS_INCLUDE_PATHとLIBRARY_PATHを書き込み、多少は簡略化するが、それでもまだ面倒。ていうかこんなことをやると他の環境で使用する際面倒なことこの上ないのでやめたほうが無難。おとなしくmakefileを書こう。

 

makefileが冗長になるのは個人開発のコードでは嬉しくないが仕方ないか…。

コンパイルオプションの意味を調べてみる。

-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

下記を参照すると大体理解できた。HDF5の性質上、全ての情報を一つのファイルに入れるのでこれはいるかも。CFLAGSに書き込めばよいか。しかしgcc、しかも32bitPCに生じるlimitationなので、最近のPCなら必要ないんじゃないかな…。

プログラミング/C,C++/2GBより大きなファイルの扱い - PukiWiki

 

-I/$HOME/local/include

HDF5のインクルードファイルを読み込んでいる。makefileのINCLUDE欄にかけばよい。

 

-L/$HOME/local/lib $HOME/local/lib/libhdf5_hl_cpp.a $HOME/local/lib/libhdf5_cpp.a $HOME/local/lib/libhdf5_hl.a $HOME/local/lib/libhdf5.a

静的ライブラリが存在するディレクトリを指定した上で、その中の静的ライブラリ.aを全て記入している。これ必要か?LIBSに書き込む。(なぜか自分のmakefileが-L以下を認識しない。仕方ないので上記の静的ライブラリ(*.a)を全部記述した)

 

-lz

zlibの有効化。

-ldl

動的ロードライブラリへのリンク。よくわからんので放置。初心者の悲しさ。iccだと必要ないかも。

-lm

算術計算ライブラリ。iccだと必要ない。

-Wl,-rpath -Wl,$HOME/local/lib

Wlはリンカ(ld)へのオプションをccに伝えるもの、rpathは動的ライブラリを指定、その場所を$HOME/local/libに指定?書かなくても動くかもしれない。

(参考:C - ライブラリとは何なのか? - Qiita

 

makefileは下記のものが知る限り一番わかりやすい。ありがたい。

シンプルで応用の効くmakefileとその解説 - URIN HACK