Python から C/C++ を呼び出すには? [closed] 質問する

Python から C/C++ を呼び出すには? [closed] 質問する

C または C++ ライブラリへの Python バインディングを構築する最も簡単な方法は何でしょうか?

(これが問題であれば、私は Windows を使用しています。)

ベストアンサー1

ctypesモジュールは標準ライブラリの一部であるため、より安定しており、広く利用可能です。ガブガブ飲むいつも私に問題

ctypes を使用する場合、Python に対するコンパイル時の依存関係を満たす必要があり、バインディングは、コンパイルされた Python だけでなく、ctypes を持つすべての Python で機能します。

foo.cpp というファイルに、通信したい単純な C++ サンプル クラスがあるとします。

#include <iostream>

class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
};

ctypesはC関数としか通信できないため、それらをextern "C"として宣言する必要があります。

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}

次にこれを共有ライブラリにコンパイルする必要があります

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

そして最後に、Python ラッパーを記述する必要があります (例: fooWrapper.py)

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')

class Foo(object):
    def __init__(self):
        self.obj = lib.Foo_new()

    def bar(self):
        lib.Foo_bar(self.obj)

それができたら、次のように呼び出すことができます

f = Foo()
f.bar() #and you will see "Hello" on the screen

おすすめ記事