添加到C代码和swig接口的功能无法识别; “没有属性'set_latency'”

时间:2018-07-20 18:37:33

标签: python c swig ftdi

我正在使用libmpsse与FTDI芯片进行通信,并且为了提高吞吐量,我想向C代码添加一个函数以降低芯片的延迟(libFTDI支持) ,然后使用swig接口将函数与Python配合使用。但是,当我调用创建的函数时,出现一条错误消息,提示没有属性“ set_latency”(详细信息如下)。

对于mpsse.c,我在底部添加了

int set_latency(struct mpsse_context* mpsse, int latency) {
    return ftdi_set_latency_timer(&mpsse->ftdi, latency);
}

在mpsse.h中,我在Version函数之后添加:

int set_latency(struct mpsse_context* mpsse, int latency);

然后我使用以下命令重新编译swig接口:

make clean
swig -python mpsse.i
gcc -fpic -c mpsse.c mpsse_wrap.c -I/usr/include/python2.7/
gcc -shared mpsse.o mpsse_wrap.o -o _mpsse.so

我对swig不熟悉,但是在mpsse.i中包含了mpsse.h,我相信这意味着不需要更改它。

使用swig之后,将其添加到pylibmpsse.py中swig生成的代码中:

def set_latency(mpsse, latency):
    return _pylibmpsse.set_latency(mpsse, latency)
set_latency = _pylibmpsse.set_latency

然后通过将其添加到mpsse.py中来调用生成的代码:

def set_latency(self, latency):
    return _mpsse.set_latency(self.context, latency)

这是错误消息:

Traceback (most recent call last):
  File "bw-test.py", line 1, in <module>
    from mpsse import *
  File "[...]/libmpsse-master/src/mpsse.py", line 1, in <module>
    import pylibmpsse as _mpsse
  File "[...]/libmpsse-master/src/pylibmpsse.py", line 455, in <module>
    set_latency = _pylibmpsse.set_latency
AttributeError: 'module' object has no attribute 'set_latency'

该错误似乎暗示pylibmpsse.py文件或_pylibmpsse(由swig_import_helper()生成)有问题,但是我对swig并不十分了解。我已经尝试过明确声明我在mpsse.i中添加的功能以及在类似的stackoverflow问题中看到的一些格式更改,但是没有一个更改错误消息。如果有人能对我做错的事情提供一些见解,将不胜感激!

1 个答案:

答案 0 :(得分:0)

似乎SWIG生成的扩展模块是_pylibmpsse,因此您的最终gcc命令应为:

gcc -shared mpsse.o mpsse_wrap.o -o _pylibmpsse.so

换句话说,我怀疑您从未更换过原始的SWIG模块。