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も見てみるか…