PythonモジュールをC++(Boost.Numpy)で作るための準備(Windows環境)

ひとまずWindows上で動かせるようにする。なぜなら、数値計算用のマシンがWindowsだから・・・。インストール済みのminicondaがPython2.xだったのでアンインストールの上、Anacondaをインストール。AnacondaでインストールしたPythonは3.6ということで、今までWindowsにインストールしていた3.5はアンインストールすることにした。

Boost.Numpyは1.63からBoostに同梱されるようになったので、新しいものをインストールすればよさげ。インストール後、C:\ProgramData\Anaconda3\Library\include\boost\python下にnumpyディレクトリがあることを確認。

$ conda install -c conda-forge boost=1.65.0

コンパイル時は以下のディレクトリを指定すればよい(?)。Anaconda3のpkgディレクトリをみるとvc14って文字列が見えたけど、VisualStudio15でないとうまくいかないパターンやろか。。。

include directory: C:\ProgramData\Anaconda3\include, C:\ProgramData\Anaconda3\Library\include
include direcotry: C:\ProgramData\Anaconda3\libs, C:\ProgramData\Anaconda3\Library\lib

はい、Visual Studio13(vc12)ではだめですねー、dll吐き出せませんーー。もう組み込みの開発は終了したからVS2015に移行してもよい気がするけど、Let's Noteに入れてあるVS2015で作業する。というわけで、Anacondaのインストールからやり直しorz。

んで、やり直してビルドするもエラー。libboost_numpy3-vc140-mt-s-1_64.libがないと怒られた。libboost_numpy3-vc140-mt-1_64.libはあるけど、libboost_numpy3-vc140-mt-s-1_64.libはない。MultithreadはあるのにMultithread static runtimeがない。Boostのビルドからやり直しってやつか。なお、ネット上のブログなりQiitaなりを見る限り、Macだと自前でビルドせずにうまくいってるっぽい。


公式からWindows用のzipファイルをダウンロードしてローカルで展開。VS2015 x64 Native tool cmdを管理者権限で開き、展開したディレクトリのルートで以下を実行。

$ bootstrap.bat

次に、project-config.jamとuser-config.jamを編集。msvcとpythonの箇所でパス指定。どっちかかたっぽでよかったぽい? 前者の中身は以下。

import option ; 
using msvc : 14.0 : "c:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe"; 
option.set keep-going : false ; 

後者のpython部分は以下。

# Configure specific Python version.
using python : 3.6.2 : C:/ProgramData/Anaconda3 : C:/ProgramData/Anaconda3/include : C:/ProgramData/Anaconda3/libs ;

設定ファイルを変更したら以下を実行。今回はpythonだけビルドすればよい。

$ .\b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 6 --with-python

結果、以下のファイルが出力されていた。

libboost_numpy3-vc140-mt-s-1_65.lib
libboost_numpy3-vc140-mt-sgd-1_65.lib
libboost_python3-vc140-mt-s-1_65.lib
libboost_python3-vc140-mt-sgd-1_65.lib

Boostを自前でビルドしたので, VSのパスも変更。

include directory: C:\ProgramData\Anaconda3\include, C:\Users\hitoh\Documents\boost_1_65_0
include direcotry: C:\ProgramData\Anaconda3\libs, C:\Users\hitoh\Documents\boost_1_65_0\stage\x64\lib

VSの設定を、

Release x64
構成プロパティ→全般→構成の種類を.dllに

あとはビルドすればよい。


理論部分は原稿にまでできているのに、実時間で計算させるための実装に時間くっててしぶい気持ち。。。