boost.pythonを使って何かしてみたくなったので、適当にネットを検索、次に、このサイトにある下記のプログラムをcompileしたところ、pyconfig.hがないと出たので、pyconfig.hとかいう問題のヘッダーファイルを早速インストールすることにした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <boost/python.hpp> namespace bp = boost::python; void entry_hello_world() { printf("hello world\n"); } double entry_square(double x) { return x * x; } BOOST_PYTHON_MODULE(_func) { bp::def("hello_world", entry_hello_world); bp::def("square", entry_square); } |
ネットで色々調べると、python3.6devをインストールする必要があることが分かった。
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6-dev
sudo apt-get update
sudo apt-get install python3.6-dev
下記のコマンドを打ち込むと、今度は、-lboost_pythonとか意味分からんと言われた。
g++ -shared _func.cpp -lboost_python -I/usr/include/python3.6/ -fPIC -o _func.so
ネットで検索すると、このサイトが、libboost-python-dev
をインストールすれば解決できるみたいに書いてあったので、早速それをインストールした。
sudo apt install libboost-python-dev
やっと完成したライブラリをインポートしたら、無情にもエラーが吐き出された。
----> 1 import _func
2 print (_func.square(2))
ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type
2 print (_func.square(2))
ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type
ネットで調べたら、このサイトに、libboost-python-dev-35
を使うと書いてあった。
g++ -shared _func.cpp -lboost_python-py35 -I/usr/include/python3.6/ -fPIC -o _func.so
今度はうまくファンクションが機能してくれた。
スポンサーリンク