我正在开发一个项目,我必须使用ctypes从Python脚本中的C文件中调用几个C函数。我已经从C文件创建了一个共享对象,并在我的Python脚本中使用它。
我已经在ctypes中定义了C结构,但是在运行Python脚本时我得到了RuntimeError
。错误是:
ffi_prep_cif failed
我在我的C文件中包含了ffi.h标头,并再次创建了共享对象,但我仍然遇到同样的错误。有什么建议吗?
我在Python中为包装器编写的代码如下:
if __name__ == "__main__":
lib_fib = ctypes.CDLL('./lib6.so')
class model_t(ctypes.Structure):
_fields__ = [('weight', ctypes.POINTER(ctypes.c_float)),
('threshold', ctypes.c_float)]
data = [1.0, 2.0, 3.0]
f1 = 2.5
l = len(data)
m = model_t()
m.weight = (ctypes.c_float * l)(*data)
m.threshold = (ctypes.c_float * 1)(l)
chr_p = ctypes.POINTER(ctypes.c_char)
c = 'abcd'
l1 = len(c)
chr_p = (ctypes.c_char * l1)(*c)
out = lib_fib.new_classify(m, chr_p)
print out`
我正在尝试用C self.abc_prob()
替换名为new_classify()
的Python函数。这是我的C函数的一部分,我想用ctypes调用它:
extern double
new_classify(model_t *model_ptr, char *s)
{
char bigram[3]; /* Used only when debugging */
float *model_weights = model_ptr->weights;
float threshold = model_ptr->threshold;
/* ... */