ctypes を使用して Python から C/C を呼び出す
Python と C/C の間のブリッジを確立しようとする場合、 ctypes モジュールは次のように表示されます。好ましい選択です。 Python の標準ライブラリとのシームレスな統合により、安定性と広範なアクセシビリティが保証されます。時折問題が発生する可能性がある swig とは異なり、ctypes は 2 つの言語間に信頼できるブリッジを提供します。
ctypes は、Python でのコンパイル時の依存関係を処理する能力に優れており、Python のインストール環境でバインディングが完璧に機能することを可能にします。コンパイルに使用されるバージョンに関係なく、ctypes をサポートします。
その使用法を説明するために、次の名前の C クラスを考えてみましょう。 Foo:
#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 ラッパーを作成して、 connection:
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)
このセットアップを使用すると、Python から C ライブラリを簡単に呼び出すことができます:
f = Foo() f.bar() # Prints "Hello" on the screen
ctypes は、C/C ライブラリへの Python バインディングを構築するための簡単で効率的なソリューションを提供します、これらのプログラミング言語間のシームレスな相互運用性が促進されます。
以上がctypes はどのようにして Python と C/C ライブラリをシームレスにブリッジできるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。