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の書き方がわからない。
下記サイトのサンプルコードのコンパイルに失敗。
下記サイトを参考に-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に指定?書かなくても動くかもしれない。
makefileは下記のものが知る限り一番わかりやすい。ありがたい。
シンプルで応用の効くmakefileとその解説 - URIN HACK