2010/02/28

ROOTでFFTWを使う

導入したScientific Linuxには、デフォルトだとgccもEmacsも入っていない。
まずはこれらを入れる。
それ以外にもROOTのインストールには、libXft、libXpm、libXextが必要。

$ su
# yum install gcc*
# yum install emacs*
# yum install libXft*
# yum install libXpm*
# yum install libXext*

これでROOTに必要なコンパイラとライブラリが揃う。
次にFFTWをここから、ROOTをここからダウンロードする。
これらは適当に解凍しておく。
以下のようにしてFFTWをROOTより先にインストールする。

$ cd fftw-3.2.2
$ ./configure
$ su
# make
# make install

これでFFTWがインストールされる。
デフォルトの設定で、/usr/local/lib以下にlibfftw3.aとlibfftw3.laが入る。
.bashrcには以下の1行を追加する。

export FFTW3=/home/chonan/fftw-3.2.2

指定している場所は実際には環境によって異なる。
次にROOTのほうのコンパイルを行う。

$ cd root
$ ./configure --enable-fftw3 --with-fftw3-incdir=/usr/local/include --with-fftw3-libdir=/usr/local/lib
$ su
# make
# make -j 2

最後はCPUのCore数を指定している。
.bashrcに追加するのは、以下の3行。

export ROOTSYS=/home/chonan/root
export PATH=$PATH:$ROOTSYS/bin
export LD_LIBRARY_PATH=/home/chonan/root/lib:$LD_LIBRARY_PATH

最後に.bashrcを読み込む。
これでOKのはずだと思っていたら、以下のようなエラーが出て、FFT.Cがうまく動いてくれない。

dlopen error: /home/chonan/root/lib/libFFTW.so: cannot restore segment prot after reloc: Permission denied
Load Error: Failed to load Dynamic link library /home/chonan/root/lib/libFFTW.so
Error in <TVirtualFFT::FFT>: handler not found
(class TH1*)0x0
*** Interpreter error recovered ***

ここを参考に、以下のように打つ。

$ su
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /home/chonan/root/lib/libFFTW.so

これでcontextが変更できる。
contextについてはこちら

context of /home/chonan/root/lib/libFFTW.so changed to system_u:object_r:textrel_shlib_t

これでFFT.Cが走るようになる。

0 件のコメント: