Boost.Pythonをやってみた
http://boost.cppll.jp/BDTJ_1_29/libs/python/doc/tutorial/doc/building_hello_world.html
をやってみた。
環境はWindowsXP VC8(ExpressEdtion)
boost-1.37.0に添付されているサンプルはそのままでは動かず結構苦労した。
過去のバージョンが放置されているっぽい。
せっかくなのでメモりまっす。
pythonインストール。
先月出ていたバージョン2.6をさくっとインストール。
ついでに後の工程で楽をするために以下の環境変数を設定。
PYTHON_ROOT=C:\python26 PYTHON_VERSION=2.6 INCLUDE=C:\boost LIB=C:\boost\lib
boostのpythonモジュールをビルドする(ソースでインストールしていたので)
boostのアーカイブはc:\boostに展開している。
bjamはすでにパスが通してある。
Visual Studio 2005 コマンド プロンプト
> cd c:\boost > bjam.exe --toolset=msvc-8.0 --stagedir=. link=static,shared release debug stage
tutorial開始
> C:\boost\libs\python\example\tutorial > bjam -sTOOLS=msvc --debug-configuration
でエラー出てとまる。
rule python-extension unknown in module Jamfile
英語のメーリングリスト(場所失念)で同じ問題でこけているのを発見し修正する。
tutorialのディレクトリのJamrootファイルで
python-extension hello_ext : hello.cpp ;
の前の行に
using python ;
を入れる。
これで実行すると次のようなエラーがでる。
error: Unable to find file or target named error: '/boost/python/boost_python' error: referred from project at error: '.'
Jamrootでリンクファイルを指定していると思しき箇所をコメントアウトする。
Windows版のboostはリンクファイル自体は多分pragmaで指定されるので明示する
必要が無いのとそのためにLIB環境変数を指定しているので。
#project # : requirements <library>/boost/lib/boost_python ;
再度
> bjam -sTOOLS=msvc --debug-configuration
前より進んだところでエラーが出る。
途中まではうまくいったようで
C:\boost\libs\python\example\tutorial\bin\msvc-8.0express\debug\hello_ext.pyd
ができているのでビルドはうまくいっているっぽい。
これをtutorialディレクトリにコピーして
> python hello.py
とすると
Traceback (most recent call last): File "hello.py", line 6, in <module> import hello_ext ImportError: DLL load failed: 指定されたモジュールが見つかりません。
しばらく悩んだあとでdependency walkerでhello_ext.pydを見てみた。
BOOST_PYTHON-VC80-MT-GD-1_37.DLL
を要求しておりました。
おぉ、BOOSTに依存したモジュールができるのか。
C:\boost\libで該当ファイルを探してカレントにコピーしたところ無事動いた。
これでチュートリアルはこなせた。
bjam使わない方が簡単なのではなかろうか。