利用 Python 进行 C/C 集成
Python 提供了与外部库交互的多种功能。一种常见的场景是从 Python 中调用 C 或 C 函数。为了实现这一点,部署 ctypes 模块是一种有效的方法。与某些第三方工具相比,ctypes 嵌入在 Python 标准库中,确保了更高的稳定性和广泛可用性。
利用 ctypes 使您能够规避对 Python 的编译时依赖。因此,任何配备 ctypes 的 Python 实例都可以利用您的绑定,无论编译期间使用的版本如何。
为了说明 ctypes 的用法,让我们考虑一个基本的 C 类 Foo,它在名为 foo 的文件中定义。 cpp:
#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 包装器来弥补差距:
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() # Output: "Hello" displayed on screen
以上是Python的ctypes模块如何与C/C库无缝集成?的详细内容。更多信息请关注PHP中文网其他相关文章!