Boost.Python ことはじめ
Mac環境での動作を目指す。
インストール
Homebrew で簡単にインストールできる……
$ brew install boost
と、思ったら後の手順でリンクエラー。
$ g++ -I`python -c 'from distutils.sysconfig import *; print get_python_inc()'` \ -DPIC -bundle -fPIC -o hello.so hello.cpp -lboost_python -framework Python ld: library not found for -lboost_python clang: error: linker command failed with exit code 1 (use -v to see invocation)
boost-python というパッケージに分離していた模様。こちらもインストールする必要があった。
$ brew install boost-python
2015-01-18追記: Python3 に対応するためには、インストール時に以下のオプションを付けなければならない。
$ brew install boost-python --with-python3
2015-01-18追記2: pyenv を使っている場合は、global な Python を使用するように設定した状態でインストールしないとエラーになる。
$ pyenv global system $ pyenv rehash $ pyenv versions
コード例
boost のおかげで、とてもスッキリとしたコードになる。
#include <boost/python.hpp> #include <iostream> using namespace std; void hello() { cout << "hello world" << endl; } BOOST_PYTHON_MODULE(hello) { using namespace boost::python; def("hello", &hello); }
ビルド
hello.cpp から hello.so を作る。
$ g++ -I`python -c 'from distutils.sysconfig import *; print get_python_inc()'` \ -DPIC -bundle -fPIC -o hello.so hello.cpp -lboost_python -framework Python
動作確認
REPL で動かしてみる。
>>> import hello >>> hello.hello() hello world >>>
本当に簡単だった。
0 件のコメント:
コメントを投稿