liblabjackusb.so:未定义符号:DigitalIO

liblabjackusb.so: undefined symbol: DigitalIO

我遇到了 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

这表明库已正确生成。

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

这是一个错误吗?

有人遇到过吗?

我 运行 遇到了同样的问题,我在 Labjack 网站上找到了 post 应该可以回答您的问题。

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

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