読者です 読者をやめる 読者になる 読者になる

Macにファイナンス用数値計算ライブラリQuantLibをインストールする

Mac Finance

QuantLibのインストールページに従う。

QuantLib installation on Mac OS X

Boostをインストール必要がある為、Macportsが導入されていることを前提にする。

sudo port install boost

でBoostをインストールする。

次に、QuantLibをインストールする。SourceForgeから最新のQuantLibのソースファイルをDLし、適当なディレクトリに保存する。

.zipでも.tar.gzでもどちらでも良い。

QuantLib - Browse Files at SourceForge.net

此処では、ファイルをQuantLib-1.4.tar.gz、保存先をホームディレクトリ~とする。

次のコマンドでファイルを解凍する。

tar xzvf QuantLib-1.4.tar.gz

ディレクトリに移動し、configureを実行する。

cd QuantLib-1.4
./configure --enable-static --with-boost-include=/opt/local/include/ --with-boost-lib=/opt/local/lib/ --prefix=/opt/local/

--with-boost-includemacportsでインストールしたboostのヘッダーファイルの場所である。場所は、macportsの標準のヘッダーファイルの保存先なので、macports以外でboostを入れている場合は適宜修正が必要。

--prefixはこれから作成するQuantLibのインストール先である。Macportsと同じ場所にしている。他の場所が良い場合は適宜修正する。

後は、makeしてインストールするだけである。

make
sudo make install

特にエラーがでなければ終わり。一応テストとして、以下を実行する。

cd Examples/BermudanSwaption
g++ -I/opt/local/include/ -I/opt/local/include/boost BermudanSwaption.cpp -o bermudanswaption -L/opt/local/lib/ -lQuantLib

補足

macportsのパスを通してない場合は通しておいた方が良い。

~/.bashrcに以下を追加する。

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/man:$MANPATH

更に以下を追加しておくとg++を利用する時に-I-Lでのディレクトリの指定が省略可能になる。

export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATH
export LIBRARY_PATH=/opt/local/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/local/lib:$LD_LIBRARY_PATH

つまり、上を追加しておけば、

g++ -I/opt/local/include/ -I/opt/local/include/boost BermudanSwaption.cpp -o bermudanswaption -L/opt/local/lib/ -lQuantLib

が、下記で済む。

g++ BermudanSwaption.cpp -o bermudanswaption -lQuantLib

LIBRARYまわりの環境変数macではバグ?のもとらしいので下記あたりを一読すると良いかもしれない。

参考:

補足2

boostのversionが1.53より上だとQuantlibのtest-suiteのコンパイルが通らず下記のエラーがでる。

barrieroption.cpp: In static member function ‘static void BarrierOptionTest::testVannaVolgaSimpleBarrierValues()’:
barrieroption.cpp:824: error: ‘BOOST_MESSAGE’ was not declared in this scope
barrieroption.cpp: In static member function ‘static void BarrierOptionTest::testVannaVolgaDoubleBarrierValues()’:
barrieroption.cpp:1068: error: ‘BOOST_MESSAGE’ was not declared in this scope
barrieroption.cpp: At global scope:
barrieroption.cpp:1246: fatal error: opening dependency file .deps/barrieroption.Tpo: Permission denied
compilation terminated.
make[1]: *** [barrieroption.o] Error 1

その場合は以下をtest-suite/utilities.hppに以下を追加する。

#if BOOST_VERSION > 105300
#define BOOST_MESSAGE(msg) BOOST_TEST_MESSAGE(msg)
#endif

c++ - BOOST_MESSAGE undefined - Stack Overflow