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