我正在使用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问题中看到的一些格式更改,但是没有一个更改错误消息。如果有人能对我做错的事情提供一些见解,将不胜感激!
答案 0 :(得分:0)
似乎SWIG生成的扩展模块是_pylibmpsse
,因此您的最终gcc命令应为:
gcc -shared mpsse.o mpsse_wrap.o -o _pylibmpsse.so
换句话说,我怀疑您从未更换过原始的SWIG模块。