« LL魂2007デモコード | メイン | PythonからSIMD(SSE2)を使うC++関数を呼び出す »

VC2005でboost::Pythonを使う

VC(Visual Studio)2005でboost::pythonを使おうとすると,

error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

というメッセージがでて使うことができません.

完全無保証ですが,次の方法でとりあえず使うことができました.
# py2exeはまだ動かせてません.どなたか教えてください.

1. PythonをVC2005でコンパイルする.

頑張ってください:-)
本家のソースだけでも最小限の構成ならバイナリを作ることができます.

2. VC2005用boost::pythonをインストールする.

boost/libs/python/build

>set PYTHON_VERSION=2.5
>set PYTHON_PATH=<Pythonのディレクトリ>
>bjam
でboost_python-vc80-mt-1_34.dllを作り,Python25のディレクトリにコピーしておきます.

3. python25/lib/distutilsを次のように変更する.
各自のインストール環境によって変わるかもしれません.このあたりを直せば動くというポインタ情報程度の認識でお願いします.

128行目あたり

-    if version > 7.0:
+    if version >= 8.0:
+        self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0")
+    elif version > 7.0:
        self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")

255行目あたり

-    if os.environ.has_key("DISTUTILS_USE_SDK") and os.environ.has_key("MSSdk") and self.find_exe("cl.exe"):
+    if self.__version >= 8 or (os.environ.has_key("DISTUTILS_USE_SDK") and os.environ.has_key("MSSdk") and self.find_exe("cl.exe")):

299行目あたり

+    if self.__version >= 8:
+        self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/EHsc' ,
+                                 '/DNDEBUG']
+        self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/EHsc',
+                                      '/Z7', '/D_DEBUG']
+    else:
        self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ,
                                 '/DNDEBUG']
        self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX',
                                      '/Z7', '/D_DEBUG']

このようにすれば
LL魂2007デモコードのchaos.zipを

setup.py install
でコンパイル&インストールすることができます(VPythonは別途必要).

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)