2025年CFFI - 简介及简单使用

CFFI - 简介及简单使用CFFI 简介 CFFI 可以通过 Python 调用 C 的功能接口 基于一种类 C 声明 基本可以直接和任何 C 代码交互 类 C 声明通常直接拷贝头文件即可 版权声明 itisyang 未经博主允许不得转载 CFFI 接口基于 LuaJIT s FFI 遵循下面几条原则

大家好,我是讯享网,很高兴认识大家。

CFFI 简介

CFFI可以通过Python调用C的功能接口,基于一种类C声明,基本可以直接和任何C代码交互。(类C声明通常直接拷贝头文件即可)

| 版权声明:itisyang,未经博主允许不得转载。

CFFI接口基于LuaJIT’s FFI ,遵循下面几条原则:

  • 目标是在不学习第三种语言的情况下从Python调用C代码。现有的替代方法要求用户学习特定语言(Cython、SWIG)或API (ctypes)。CFFI设计只要求用户知道C和Python,尽量减少需要学习的额外API。
  • 将所有与Python相关的逻辑保持在Python中,所以你不需要些大量的C代码(不像CPython native C extensions)。
  • 首选API级别上运行(Application Programming Interface):C编译器根据你写的声明直接链接C结构。或者,也可以选择ABI级别(Application Binary Interface):这种方式通过ctypes运行。
  • 目前不支持一些C99结构,但所有C89结构都应该支持,包括宏。
  • 正在尝试支持 PyPy 和 CPython,为IronPython和Jython等其他Python实现提供合理的路径
  • 注意,与Weave不同的是,这个项目并不是要在Python中嵌入可执行C代码。而是从Python调用现有的C库。

CFFI 简单使用

使用CFFI作为已经编译好的C库的接口。

库譬如 piapprox.dll (Windows) 或 libpiapprox.so (Linux and others) 或者 libpiapprox.dylib (OS X)


讯享网

库里面有个函数 float pi_approx(int n)

使用CFFI调用这个接口的方式如下:

首先创建一个piapprox_build.py:

from cffi import FFI ffibuilder = FFI() # cdef() expects a string listing the C types, functions and # globals needed from Python. The string follows the C syntax. ffibuilder.cdef(""" float pi_approx(int n); """) # This describes the extension module "_pi_cffi" to produce. ffibuilder.set_source("_pi_cffi", """ #include "pi.h" // the C header of the library """, libraries=['piapprox']) # library name, for the linker if __name__ == "__main__": ffibuilder.compile(verbose=True) 复制代码

讯享网

执行这个脚本。如果一切正常,会生成一个 _pi_cffi 模块

在运行时,可以这样使用扩展模块

讯享网from _pi_cffi import ffi, lib print(lib.pi_approx(5000)) 复制代码
小讯
上一篇 2025-03-17 23:19
下一篇 2025-03-03 18:12

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24948.html