ホームページ >バックエンド開発 >Python チュートリアル >ctypes を使用して C/C ライブラリの Python バインディングを効率的に作成するにはどうすればよいですか?
Python による C/C のインターフェース
Python は使いやすさと拡張性により、あらゆるレベルのプログラマーにとって魅力的な言語です。ただし、既存の C/C ライブラリとの統合が望ましい場合もあります。この記事では、これらのライブラリの Python バインディングを構築するための最も効率的な方法について説明します。
Python の標準ライブラリの一部である ctypes モジュールは、このタスクに対して安定した広く利用可能なソリューションを提供します。他のバインディング メソッドとは異なり、ctypes はコンパイルされた Python のバージョンに依存せず、さまざまな Python インストールとの互換性を確保します。
C で書かれた次のコード スニペットを考えてみましょう。
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
これを Python とインターフェースするには、ctypes が認識できるように関数を 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 ラッパーを作成します:
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" to standard output
以上がctypes を使用して C/C ライブラリの Python バインディングを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。