从 Python 调用 C/C
在使用 Windows 系统时,有效地将 Python 绑定到 C/C 库至关重要。在可用的选项中,ctypes 模块脱颖而出,是一个引人注目的选择。
利用 Ctypes 进行绑定
Ctypes 是 Python 标准库的一个组成部分。与其他替代方案相比,这种固有的稳定性和广泛的可用性使其成为一个有利的选择。此外,ctypes 绑定经过定制,可与支持 ctypes 的每个版本的 Python 无缝协作,而不仅仅是编译期间使用的版本。
使用 Ctypes 构建 Python 绑定
考虑在 foo.cpp 中定义一个名为 Foo 的简化 C 类:
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
以方便通信通过 ctypes 使用 Python,其函数必须声明为 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)
使用此包装器,您可以与 C 交互class:
f = Foo() f.bar() # Outputs "Hello" to the screen
Ctypes 的好处
Ctypes 简化了将 C/C 代码绑定到 Python 的过程,在 Windows 系统上提供了稳定且广泛适用的解决方案。它提供了一种强大且交叉兼容的方法来与 Python 的本机库进行交互。
以上是Ctypes 如何在 Windows 上高效桥接 Python 和 C/C?的详细内容。更多信息请关注PHP中文网其他相关文章!