LoginSignup
7
1

More than 3 years have passed since last update.

ubuntuでC++をpython3に公開する

Last updated at Posted at 2019-08-13

初めに

C++のソースをpython3で使用するためにboostpythonをインストールしました。
一般的な方法だとboostを公式サイトからダウンロードして使用するみたいですが、pythonとC++の共有以外のboostは特に必要ないため楽な方法がないか探してaptインストールを見つけました。

環境

  • Ubuntu:18.04.2
  • python3:3.6.8

必要ライブラリのインストール

1.最初にaptのインストールリポジトリを最新にします。

apt update

2.ubuntuのバージョンによっては既にインストールされているため、不要ですが今回はなかったのでpython3をインストールします。

apt install python3

3.boostpythonに必要なため、pythonとC++の共通ライブラリをインストールします。

apt install build-essential python3-dev

4.今回の目玉であるboostpythonをインストールする

apt install libboost-dev

@additengineer さんのコメントで以下のコマンドを追加。
ライブラリのインストール可能なバージョンや環境によってはmake時に-lのライブラリパスがない旨のエラーがでます。その際は、以下を入れてください。

apt install libboost-all-dev

使用方法

1.pythonに公開するC++のソースを作成します。今回はわかりやすくするため、クラスではなく文字列を返却する関数。

CModule.cpp
#include <boost/python.hpp>

std::string hello() {
    return "hello world";
}

BOOST_PYTHON_MODULE(CModule) {
    using namespace boost::python;
    def("hello", &hello);
}

2.C++のコンパイルのために必要なので、boostpythonの内部で使用するpythonとC++の共有ライブラリのパスを調べます。※python2とpython3が共存している環境ではpython3側を明示的に指定すること

python3 -c 'from distutils.sysconfig import *; print(get_python_inc())'

3.コンパイルは、簡単にするため今回はmakeファイルを使用せずにg++でコンパイルをします。

g++ -I 2で調べたインクルードパス -DPIC -shared -fPIC -o アウトプットモジュール名 1で作成したC++ファイル -lboost_python3
g++ -I/usr/include/python3.6m -DPIC -shared -fPIC -o CModule.so CModule.cpp -lboost_python3

4.pythonから呼び出す
公開したC++の設定どおりにpython側から該当関数を呼び出す。

>>> import CModule
>>> CModule.hello()
'hello world'
7
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1