添加到C代码和swig接口的函数无法识别;“无属性‘set\u latency’”

2024-05-13 01:49:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用libmpsse与FTDI芯片通信,为了提高吞吐量,我想在C代码中添加一个函数来降低芯片的延迟(由libFTDI支持),然后使用swig将函数与Python接口。然而,当我调用创建的函数时,我得到一个错误,说没有属性'set\u 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之后,它被添加到swig-in生成的代码中pylibmpsse.py公司地址:

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\u import\u helper()生成),但我对swig不够熟悉。我曾尝试显式声明我在mpsse.I中添加的函数,以及在类似的stackoverflow问题中看到的一些格式更改,但都没有更改错误消息。如果有人能提供一些关于我做错了什么的见解,我将不胜感激!你知道吗


Tags: 函数inpyreturn错误contextfileswig
1条回答
网友
1楼 · 发布于 2024-05-13 01:49:00

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

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

换句话说,我怀疑你从未更换过原来的SWIG模块。你知道吗

相关问题 更多 >