Boost.pythonをwindows7 64bitで使用
結構面倒なんでメモ
環境構築
使用したのは以下。
- Microsoft Windows SDK for Windows 7 and .NET Framework 4 (GRMSDKX_EN_DVD.iso)
- Visual C++ 2010 Express Edition
- Boost 1.47.0
- Python 2.7 x64
Boostのコンパイル
boost_1_47_0.zipを適当な場所に展開し、bootstrap.batをクリック。
project-config.jamを編集。
import option ; using msvc ; option.set keep-going : false ; using python : 2.7 : C:\\python27 ; libraries = --with-python ;
コマンドプロンプトでboostのディレクトリまで移動し、以下を実行。
bjam install --prefix=F:\boost_1.47.0 --build-dir=. --toolset=msvc-10.0 --build-type=complete stage threading=multi address-model=64
Boostディレクトリ\boost\bin.v2\libs\python\build\msvc-10.0に、それぞれRelease、Debug用のライブラリができる。
VCでプロジェクトを作成。
ファイル=>新しいプロジェクト=>全般=>空のプロジェクト。
今回はプロジェクト名をboost_testとする。
プロジェクト=>プロパティを選択し、プロパティページを開く。
プロパティページの右上の構成マネージャボタンをクリック。アクティブソリューションプラットフォームをクリックし、新規作成でx64を選ぶ。
構成プロパティ=>全般 へ移動し、以下のように編集。
構成の種類 | ダイナミック ライブラリ (.dll) |
ターゲットの拡張子 | .pyd |
プラットフォーム ツールセット | Windows7.1SDK |
構成プロパティ=>VC++ディレクトリで以下のようにする。
インクルードディレクトリ |
C:\python27\include F:\boost_1.47.0\include\boost-1_47 |
ライブラリディレクトリ |
C:\python27\lib F:\boost_1.47.0\lib |
ソリューションエクスプローラ=>プロジェクト内のソースファイルディレクトリを右クリック=>追加=>新しい項目=>main.cppを作成。
サンプルコードを記述。
#include <boost/python.hpp> using namespace boost::python; struct World { void set(std::string msg) { this->msg = msg; } std::string greet() { return msg; } std::string msg; }; BOOST_PYTHON_MODULE(boost_test) { class_<World>("World") .def("greet", &World::greet) .def("set", &World::set) ; }
ビルドしたら、 boost_test.pydとF:\boost_1.47.0\lib内のboost_python-vc100-mt-1_47.dllを、C:\python27\DLLs内にコピー。
以下、pythonのサンプルコードです。
import boost_test world = boost_test.World() world.set("hello") print world.greet() #return hello