【C++】 gMockのEXPECT_CALLでエラーが出た時
salmoncode
TechTopic
こんにちは!エンジニアのサーモンです。
Pythonで開発しているときに困るシーンとして、利用したいライブラリがC++でしか提供されていないことがあります。
新しく入手したハードウェアを利用したいときなどですね。
その場合は有志が作ってくれているラッパーを利用しますが、それもないことがあります。
そんなとき、C++のライブラリを呼び出すにはどうすれば良いのでしょうか。
この記事では、PythonからC++の関数を呼び出す方法について紹介します。
ぜひ最後まで読んでいってください!
PythonとC++を連携させるには、C++の関数をPythonにバインディングする必要があります。
バインディングツールはいくつかありますが、今回はpybind11を利用します。
このツールは機械学習ライブラリとして有名なpytorchにも使われているとのことなので、安心して利用できそうですね。
ちなみに、名前からしてC++11にしか対応してなさそうですが、C++14や17にも対応しているとのことでした。
pybind11はpipでインストールすることができます。
1pip install pybind11
まずはC++の関数を定義し、Pythonから呼び出せるようにバインドします。
バインドには、pybind11から提供されるマクロを利用します。
1// C++
2void PrintFromNative(std::string text) {
3 std::cout << text << std::endl;
4}
5
6// バインド
7PYBIND11_MODULE(my_module, module) {
8 module.def("PrintFromNative", &PrintFromNative); // 関数のバインド
9}
Pythonからはマクロで指定したモジュール名でインポートすることができます。
1# Python
2import my_module
3
4# 関数の呼び出し
5my_module.PrintFromNative("Hello!!")
この記事では、以下の内容について解説しました。
pybind11について書かれた書籍は見つかりませんでした。
公式ドキュメント