2013-07-18 25 views
5

我正在嘗試從C源代碼編譯成Python與ctypes加載共享庫。共享庫(以下名稱爲「libsub.so」)使用libusb庫。這就是 「製造」 所做的:Python的ctypes加載錯誤:未定義的符號

gcc -c -O2 -Wall -Werror -g -I../src -I../boot/vnd/fw -I. -fPIC -DLIBUSB_1_0 -I/usr/include/libusb-1.0 -o libsub.o libsub.c 
gcc -shared -Wl,-soname,libsub.so -o libsub.so libsub.o 

我之後嘗試的Python:

import ctypes 
h = ctypes.cdll.LoadLibrary('./libsub.so') 

不過,我喜歡這個

OSError: ./libsub.so: undefined symbol: libusb_open

我發現了一個錯誤「libusb_open 「實際上是libusb頭文件在」/usr/include/libusb-1.0/libusb.h「中的一個函數,它已經包含在這個庫」libsub.c「的源代碼中。

StackExchange中的一些帖子在使用ctypes加載C++共享庫時討論了這種「未定義的符號」錯誤,並且通過將編譯器從gcc更改爲g ++來解決問題。然而,我的源代碼是用C語言編寫的 - 所以它可能是一種不同的情況(實際上我嘗試過使用g ++來編譯這個源代碼,但遇到了一些錯誤)。任何人都可以指出我在這裏錯過了什麼?謝謝!

+0

我有同樣的問題,我會_love_聽到如果答案幫助你或如果你找到了其他解決方案。 – Bex

回答

4

我相信你應該要求,在第二行,你libsub.so與一個指向原始libusb.so聯繫在一起的:

gcc -shared -Wl,-soname,libsub.so -lusb -o libsub.so libsub.o 
            ^^^^^ 

也許你還需要指定的路徑與libusb 。與-L/path