Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@mink0212

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

More than 1 year has passed since last update.

初めに

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'
1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
mink0212
日々気になったことや勉強したことやノウハウなどをまとめています。 ちょっとツールやライブラリの使用方法に偏りがち

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?