2013-07-18 29 views
5

C kaynağından derlenen paylaşılan bir kitaplığı, Citi'ler ile Python'a yüklemeye çalışıyordum. Kullanılan kitaplık ("libsub.so" aşağıda), libusb kitaplıklarını kullanmıştır. Bu "make" nedir yaptı:Python ctypes yükleme hatası: undefined symbol

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 

Ve ben bundan sonra Python çalıştı: Ancak

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

, ben "libusb_open buldum bu

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

gibi bir hata var "aslında" libsub.c "kütüphanesinin kaynağına dahil olan" /usr/include/libusb-1.0/libusb.h "dosyasındaki libusb başlığının bir işleviydi.

StackExchange'deki bazı iletiler, C++ paylaşılan kütüphaneleri klişelerle yüklerken "tanımsız sembol" hataları hakkında konuştu ve derleyiciyi gcc'den g ++ 'ye değiştirerek sorunlar çözüldü. Ancak, sahip olduğum kaynak C --- ile yazılmıştır, bu yüzden farklı bir durum olabilir (aslında bu kaynağı derlemek için g ++ 'yı denedim ama bir sürü hata yaptım). Burada neyi özlediğimi bilen var mı? Teşekkürler!

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

Belki de LibUSB yolunu belirtmeniz gerekir:

+0

Aynı sorunu yaşıyorum ve cevabın size yardımcı olup olmadığını veya başka bir çözüm bulup duymadığını öğrenmek için _love_. – Bex

cevap

4

Ben senin libsub.so orijinal libusb.so bir işaretçi ile birlikte bağlanabilir göre, ikinci satırda, ihtiyaç gerektiğine inanıyoruz -L/path ile.