2012-08-27 32 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/) 。 –