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中文网其他相关文章!