RuntimeError:ffi_prep_cif失败

时间:2017-07-11 16:41:04

标签: ctypes ffi

我正在开发一个项目,我必须使用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;

    /* ... */

0 个答案:

没有答案