pybind11を使ってPythonからC++呼び出しを行う① (モジュール作成まで)
はじめに
RPCを使ったデバッグ効率化技術に興味があったので、 手始めにPythonからC++の呼び出しを行うためのモジュール作成を行いました。
pybind11インストール
pipコマンドを使用して、インストールを行いました。
pip install pybind11
「Requirement already satisfied」が表示される場合は、 すでにインストールされていると思います。 「Python」と出る場合は、うまくいってませんでした。 対処法については、以下の通りです。
① コマンドを変えてみる
python -m pip install pybind11
上記のように変更してみると、成功することがある。
② Pythonの環境を再構築してみる
Pythonの再インストールで解決しました。 必要なファイルが十分にインストールされていない可能性があるかもしれません。
自分の場合は、上記のいずれかで解決しました。
ソースコードの準備
以下のソースコードの準備を行います。
▼TestAdd.cpp
#include <pybind11/pybind11.h> namespace py = pybind11; //2つの引数を足した結果を返す int add(int i, int j) { return i + j; } //新たなモジュールを作成する PYBIND11_MODULE(TestAdd, m) { m.doc() = "pybind11 TestAdd plugin"; m.def("add", &add, "A function that adds two numbers"); }
ビルドを行う
■ VisualStudioでビルドする場合
この段階でビルドを行うとエラーが起きると思います。 VisualStudioを使用してビルドする場合は、 下記の設定が必要となります。
上記設定を行うとエラーは解消され、ビルドは成功します。 モジュール作成まではしたことがないのでここまで。
■ Cmakeを使用する場合(推奨)
基本的にはこっちの方法を使用しています。 まずはCMakeLists.txtの作成が必要です。
cmake_minimum_required(VERSION 3.0...3.26) project(TestAdd) set(PYBIND11_CPP_STANDARD -std=c++14) find_package(pybind11 REQUIRED) pybind11_add_module(TestAdd SHARED TestAdd.cpp)
※環境に応じて適切に変更してください。
次に、以下のコマンドを使用してビルドを行います。 ※CMakeLists.txtがあるフォルダで以下のコマンド入力
mkdir build && cd build cmake .. cmake --build .
- buildフォルダを作成して、そのフォルダ内に移動する
- cmakeでビルドに必要な情報を生成する
- cmake --build でビルドを行う
以上がビルド手順となります。
まとめ
ここまでだけでも慣れていないと結構苦戦します。 次はPython側で今回作成したpydファイル(モジュール)を使ってみたいと思います。