はくとうのゲーム開発ライフ

UE4周りの技術メモ

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 .
  1. buildフォルダを作成して、そのフォルダ内に移動する
  2. cmakeでビルドに必要な情報を生成する
  3. cmake --build でビルドを行う

以上がビルド手順となります。



まとめ

ここまでだけでも慣れていないと結構苦戦します。 次はPython側で今回作成したpydファイル(モジュール)を使ってみたいと思います。