liblabjackusb.so:未定义的符号:DigitalIO

时间:2017-09-13 20:31:43

标签: python-2.7 shared-libraries ubuntu-16.04

我收到了LabJack产品https://labjack.com/products/u12

的安装和库问题

我按照这些安装步骤在ubuntu 16.04上进行安装。 https://labjack.com/support/software/installers/exodriver/mac-and-linux/in-depth-build-instructions

以下代码将我带入liblabjackusb.so中未定义的DigitalIO符号

$ python
>>> import u12
>>> d =u12.U12()
>>> d.digitalIO(idNum=-1, demo=0, trisD=3, trisIO=0, stateD=0, stateIO=0, updateDigital=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.linux-x86_64/egg/u12.py", line 2506, in digitalIO
def getFirmwareVersion(self, idNum=None):
File "/usr/lib/python2.7/ctypes/__init__.py", line 375, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 380, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /usr/local/lib/liblabjackusb.so: undefined symbol: DigitalIO

我正在寻找DigitalIO实现,我在ljacklm.h和ljacklm.c中找到它。

$cd ljacklm/libljacklm
$ nm ljacklm.o | grep DigitalIO
0000000000007489 T DigitalIO
$ nm libljacklm.so.1.20.2 | grep DigitalIO
00000000000091a9 T DigitalIO

这表明lib是正确生成的。

为什么u12.py会加载liblabjackusb.so,因为它没有DigitalIO函数声明和实现? (参见u12.py第348行)。函数_loadLinuxSo()应该加载libljacklm.so而不是liblabjackusb.so!?

这是一个错误吗?

有没有人遇到过这个?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我在Labjack网站上发现了一个应该回答你问题的帖子。

https://labjack.com/forums/u12/liblabjackusbso-undefined-symbol-digitalio

在实现libjacklm.so之前,基本上添加了U12支持。 他们建议使用rawDIO解决方法。