2012-08-27 33 views
1

我想安装cython-hidapi来读取我的Ubuntu 12.04上的USB。我已经按照从的说明和安装以下版本:导入隐藏在Python中导致错误“hid.so:undefined symbol:libusb_open”

  • LIB-USB == 1.0.9
  • hidapi == 0.7.0
  • 用Cython == 0.16
  • 蟒蛇== 2.7
  • 用Cython-hidapi ==最新结帐

当我从安装执行测试部分(蟒>进口HID),收到以下错误:

Python 2.7.3 (default, Aug 1 2012, 05:14:39) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import hid 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
ImportError: /usr/local/lib/python2.7/dist-packages/hid.so: undefined symbol: libusb_open 

有谁知道为什么我收到此错误,什么检查/做些什么呢?

谢谢! Wout

+0

运行'ldd/usr/local/lib/python2.7/dist-packages/hid.so'来显示链接到hid.so的库,它会报告没有找到预期的库。然后使用'nm'工具来打印libusb库的符号。 'nm'输出是否显示libusb_open符号存在? –

+0

LDD显示以下内容: LDD /usr/local/lib/python2.7/dist-packages/hid.so \t Linux的vdso.so.1 =>(0x00007fff7d5ff000) \t libpthread.so.0 =>/lib/x86_64-linux-gnu/libpthread.so.0(0x00007fb3c88f5000) \t libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6(0x00007fb3c8538000) \t/lib64/ld-linux -x86-64.so.2(0x00007fb3c8d3b000) nm libusb continas libusb_open: 0000000000003b50 T libusb_open –

+0

我在猜测。 setup.py运行正常吗?看看https://github.com/gbishop/cython-hidapi/blob/master/setup.py,它可能是'LDFLAGS'与你的平台不匹配,所以构建失败。 'setup.py'似乎是为i386架构设置的,您正在使用'x86-64'。尝试改变'setup.py'来匹配你拱门的库路径。 –

回答

2

我在过去一周一直在努力解决这个问题。幸运的是,我的一位熟悉Cython世界的朋友能够提供帮助。您需要更改设置(...)函数在setup.py如下:

setup(
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = [Extension("hid", ["hid.pyx", "hid-libusb.c"], 
        libraries=["usb-1.0", "udev", "rt"])] 
) 

我不知道是否会有其他分布略有差异,但是这已经在Ubuntu 12.04测试Debian 0.1.12。使用建议回复原始帖子,以确定正确的链接器标志(LDFLAGS)和libraries=行。

A pull request已经提交给维护者。您也可以从我的fork中获得更改。

+0

链接器(使用'gcc')对指定库的顺序非常敏感。从[manpage](http://manpages.ubuntu.com/manpages/lucid/man1/gcc.1.html): '这在你写这个选项的命令中有所不同,链接器按照它们指定的顺序搜索和处理库和对象文件。因此,foo.o -lz bar.o在文件foo.o之后但在bar.o之前搜索库z。如果bar.o指向z中的函数,那些函数可能不会被加载。' –

+0

您也可以查看[layman's explanation](http://blog.gnucom.cc/2012/linking-why-order-matters/) 。 –