CFFI如何使用特定目录中的c文件?

0 投票
1 回答
1385 浏览
提问于 2025-04-18 02:09

我正在学习如何在Python程序中调用C语言代码,使用的是CFFI这个工具。我写了一个名为'add.c'的C文件,内容如下:

float add(float f1, float f2)
{
    return f1 + f2;
}

然后我又写了一个名为'demo.py'的Python文件,用来调用'add.c'中的add方法:

from cffi import FFI

ffi = FFI()
ffi.cdef("""
   float(float, float);
""")

C = ffi.verify("""
   #include 'add.c'
 """, libraries=[]
)

sum = C.add(1.9, 2.3)
print sum

当我运行demo.py时,出现了一个错误,提示找不到add.c文件。为什么找不到add.c文件呢?我该怎么解决这个问题呢?

1 个回答

3

我能够重现你遇到的错误,具体的错误信息如下。

__pycache__/_cffi__x46e30051x63be181b.c:157:20: fatal error: add.c: No such file or 
directory
    #include "add.c"

看起来是 cffi 在尝试从 __pycache__ 这个子目录里编译你的文件,而 add.c 文件是在当前目录下。解决这个问题的方法是使用相对路径。

 #include "../add.c"

不过,修复了这个问题后,你的声明也不正确,所以我也把它修正了,下面的代码可以产生正确的结果。

from cffi import FFI

ffi = FFI()
ffi.cdef("""
   float add(float f1, float f2);
""")

C = ffi.verify("""
   #include "../add.c"
 """, libraries=[]
)

sum = C.add(1.9, 2.3)
print sum

撰写回答