cffi¶
cffi模块可以通过定义C函数的接口来调用共享对象文件中的函数。
安装:
pip install cffi
cffi 提供了两种主要的使用模式:
ABI(Application Binary Interface)模式
API(Application Programming Interface)模式
ABI 模式¶
ABI 模式使用现有的 C 库,不需要任何编译步骤。它主要用于直接调用现有的动态链接库。
from cffi import FFI
ffi = FFI()
# 定义 C 函数原型
ffi.cdef("""
int printf(const char *format, ...);
""")
# 加载 C 标准库
C = ffi.dlopen(None)
# 调用 C 函数
C.printf(b"Hello, %s!\n", b"world")
API 模式¶
API 模式更为灵活,它允许你编写和编译自己的 C 代码,这种模式需要一个编译步骤。
from cffi import FFI
ffi = FFI()
# 定义 C 函数和类型
ffi.cdef("""
int add(int, int);
""")
# 编写 C 代码
ffi.set_source("_example", """
int add(int a, int b) {
return a + b;
}
""")
# 编译 C 代码
ffi.compile()
# 使用编译好的模块
from _example import ffi, lib
print(lib.add(3, 4)) # 输出 7