![](/img/trans.png)
[英]How do I wrap a C-library including its header into a python program using CFFI?
[英]How to properly wrap a C library with Python CFFI
我試圖包裝一個非常簡單的C庫,其中只包含兩個.C源文件: dbc2dbf.c和blast.c
我正在做以下(來自文檔):
import os
from cffi import FFI
blastbuilder = FFI()
ffibuilder = FFI()
with open(os.path.join(os.path.dirname(__file__), "c-src/blast.c")) as f:
blastbuilder.set_source("blast", f.read(), libraries=["c"])
with open(os.path.join(os.path.dirname(__file__), "c-src/blast.h")) as f:
blastbuilder.cdef(f.read())
blastbuilder.compile(verbose=True)
with open('c-src/dbc2dbf.c','r') as f:
ffibuilder.set_source("_readdbc",
f.read(),
libraries=["c"])
with open(os.path.join(os.path.dirname(__file__), "c-src/blast.h")) as f:
ffibuilder.cdef(f.read(), override=True)
if __name__ == "__main__":
# ffibuilder.include(blastbuilder)
ffibuilder.compile(verbose=True)
這不太合適。 我想我沒有正確地包括blast.c ;
有人可以幫忙嗎?
這是解決方案(已測試):
import os
from cffi import FFI
ffibuilder = FFI()
PATH = os.path.dirname(__file__)
with open(os.path.join(PATH, 'c-src/dbc2dbf.c'),'r') as f:
ffibuilder.set_source("_readdbc",
f.read(),
libraries=["c"],
sources=[os.path.join(PATH, "c-src/blast.c")],
include_dirs=[os.path.join(PATH, "c-src/")]
)
ffibuilder.cdef(
"""
static unsigned inf(void *how, unsigned char **buf);
static int outf(void *how, unsigned char *buf, unsigned len);
void dbc2dbf(char** input_file, char** output_file);
"""
)
with open(os.path.join(PATH, "c-src/blast.h")) as f:
ffibuilder.cdef(f.read(), override=True)
if __name__ == "__main__":
ffibuilder.compile(verbose=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.