如何使用CFFI将包含其标题的C库包装到python程序中?

时间:2015-07-16 11:53:52

标签: python parsing wrapper elf python-cffi

from cffi import FFI
ffi = FFI()
header_path = '/usr/include/libelf.h'
with open(header_path) as f:
      ffi.cdef(f.read())
lib = ffi.dlopen('/usr/local/lib/libelf.so')

上面的代码是我实际上正在努力解决的问题。要使用 libelf 的某些功能,我需要包装库和标头。经过长时间的复训,这似乎是正确的做法。

但是我收到了一个解析错误:

  

无法解析“#ifndef _LIBELF_H”

似乎所有这些表达式都会导致解析错误。我怎么解决这个问题?或者是否有另一种方法包装:库和标题?

1 个答案:

答案 0 :(得分:0)

ffi.cdef() 不能处理预处理器指令。 ffi.cdef() 的目的是指定python 和C 之间共享的对象。它没有被编译(this example does not call any C compiler)。要么从文件流 f 中删除所有预处理器指令,要么挑选出真正需要的头部分并将它们复制粘贴到 ffi.cdef() 中。