6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python からの C/C++ コード呼び出し on OSX

Posted at

Boost.Python を使って、Python から C/C++ の関数を呼び出しを、OSX でトライしたときの記録です。Python3 前提です。

OSX で Boost.Python を使う方法がうまく見つけられなかったので、記録として残しておきます。どれくらい需要があるかはナゾですが、、

情報はすべて 2020/07 現在のものです。(Python3.8)

手順

1. Boost.Python のインストール

Python3 版は boost-python3 という Formula になります。

brew install boost-python3

2. C/C++ コードのコンパイル

例えば、C++ ライブラリとして以下のようなコードを用意します。

my_sample.cpp
#include <string>
#include <boost/python.hpp>
using namespace std;

string add_hello( const string s )
{
    return "Hello, " + s;
}

// モジュールの初期化ルーチン:モジュール名=my_sample
BOOST_PYTHON_MODULE( my_sample )
{
    // C++のadd_hello関数を、greetという名前でpython用に公開
    boost::python::def( "greet", add_hello );
}

コンパイルのためのコマンドは下記になります。

g++ -shared -fPIC -I/usr/local/include -L/usr/local/lib \
    $(python3-config --includes --ldflags --embed) -lboost_python38 \
    my_sample.cpp -o my_sample.so

これで、Python からは my_sample.soimport my_sample として呼び出すことができるようになります。

3. Python からの呼び出し

import my_sample

print(my_sample.greet("hoge"))  # "Hello, hoge"

補足

私がトライしたときは、コンパイラは brew で入る g++-10 ではうまく行かず、XCode 付属の g++ でうまくいきました。C++ 標準が違う、みたいな警告が出てたので、boost_phthon38g++ でコンパイルされているから、ということでしょうか。

参考資料

6
2
0

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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?