我用cfile.c
编写了一个c文件cfile.h
,并且libcfile.so
和gcc -c -fPIC cfiel.c -o cfile.o
生成了gcc cfile.o -shared -o libcfile.so
库。它们都在目录/demo/c
中。
cfile.c
文件正在使用sqlite3
,位于目录/demo/lib
中。
我尝试使用CFFI
将libcfile.so
编译为python模块。这是我的python脚本:
from cffi import FFI
ffibuilder = FFI()
ffibuilder.cdef("""
float pi_approx(int n);
""")
ffibuilder.set_source("cfile",
"""
#include "cfile.h"
""",
include_dirs = ['/demo/include'],
library_dirs = ['/demo/lib'],
libraries=[‘cfile', 'm', 'sqlite3'])
if __name__ == "__main__":
ffibuilder.compile(verbose=True)
但是后来我得到了错误:error: unknown type name 'sqlite3'
,最后是cffi.VerificationError: CompileError: comman 'gcc' faild with exit status 1
我不知道这些错误是由于build_extension脚本还是链接的.so
文件错误?
[我发现了原因,#include <sqlite3.h>
应该包含在头文件cfile.h
中,但是我并没有真正理解它,因为通常头文件包含在源文件中。