2013-07-18 6 views
5

मैं सी स्रोत से पाइथन में संकलित एक साझा लाइब्रेरी को ctypes के साथ लोड करने का प्रयास कर रहा था। साझा लाइब्रेरी (नाम "libsub.so" नीचे) libusb पुस्तकालयों का उपयोग किया गया। यह वही है "बनाना" है क्या किया:पायथन सीटीपीएस लोडिंग त्रुटि: अपरिभाषित प्रतीक

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 

और मैं उस के बाद अजगर की कोशिश की:

import ctypes 
h = ctypes.cdll.LoadLibrary('./libsub.so') 
हालांकि

, मैं इस

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

मैंने पाया की तरह एक त्रुटि "libusb_open मिला "वास्तव में" /usr/include/libusb-1.0/libusb.h "में libusb शीर्षलेख का एक फ़ंक्शन था, जिसे पहले से ही इस लाइब्रेरी" libsub.c "के स्रोत में शामिल किया गया था।

स्टैक एक्सचेंज में कुछ पोस्टों ने सीटीएस के साथ साझा पुस्तकालयों को लोड करते समय इस तरह के "अपरिभाषित प्रतीक" त्रुटियों के बारे में बात की, और जीसीसी से जी ++ में कंपाइलर को बदलकर समस्याओं का समाधान किया गया। हालांकि, स्रोत जो मैंने सी में लिखा था --- इसलिए यह एक अलग स्थिति हो सकती है (असल में मैंने इस स्रोत को संकलित करने के लिए जी ++ की कोशिश की लेकिन त्रुटियों का एक गुच्छा मिला)। क्या कोई यह बता सकता है कि मैं यहां क्या खो रहा हूं? धन्यवाद!

+0

मुझे एक ही समस्या है, और अगर मैं आपको मदद करता हूं या आपको कुछ अन्य समाधान मिल गया है तो मैं _love_ सुनूंगा। – Bex

उत्तर

4

मेरा मानना ​​है कि आप दूसरी पंक्ति में, की आवश्यकता होती है चाहिए, जो आपके libsub.so मूल libusb.so के सूचक के साथ एक साथ जोड़ा जा:

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

शायद तुम भी libusb के लिए पथ निर्दिष्ट करने की आवश्यकता 0oके साथ।

संबंधित मुद्दे