2016年8月15日月曜日

boost.pythonの始め方

boost.pythonの導入からサンプル実行まででハマったのでメモ.

インストールなどは適当なサイトを見てやれば良いが,コンパイルが問題.
g++のオプションに-Iや-Lでインクルードパスやライブラリパスを指定するだけではなく,-FでpythonのFrameworksディレクトリまでのパスを指定してやる必要がある.
-Fの指定が無くてもshared objectを作るためのコンパイルは正常に終了し,pythonのimport文でインポートできてしまうものの,何らかの関数を実行しようとするとSegmentation Fault 11を吐いて落ちるのが非常にタチが悪い.

僕の環境では,

g++ -I`python -c 'from distutils.sysconfig import *; print get_python_inc()'` -DPIC -bundle -fPIC -o basic.so basic.cpp -lboost_python  -framework Python -I/usr/local/include -L/usr/local/Cellar/boost-python/1.61.0/lib/ -F/usr/local/Cellar/python/2.7.12/Frameworks/

でOKでした.
おわり.

追記:
サンプルを動かすのはOKだとしても,自分のやりたいことしようとすると
なかなかめんどくさそうだ.
Pybind11も見てみるか…