Macにファイナンス用数値計算ライブラリQuantLibをインストールする
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-include
はmacportsでインストールした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