C/C 與Python 的介面
Python 的易用性和可擴展性使其成為對各個層級的程式設計師都有吸引力的語言。然而,有時需要與現有 C/C 庫整合。本文探討了為這些函式庫建立 Python 綁定的最有效方法。
ctypes 模組是 Python 標準函式庫的一部分,為該任務提供了穩定且廣泛可用的解決方案。與其他綁定方法不同,ctypes 不依賴編譯它的 Python 版本,從而確保與各種 Python 安裝的兼容性。
考慮以下用 C 編寫的程式碼片段:
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
為了與 Python 連接,我們必須將函數宣告為 extern "C" 以便 ctypes識別它們:
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中文網其他相關文章!