मैं साइथन दस्तावेज के माध्यम से चल रहा हूं और प्रत्येक उदाहरण ऐप्स का निर्माण कर रहा हूं। मैं सी पुस्तकालयों का उपयोग करने में थोड़ा फंस गया हूँ। सफलतापूर्वक .so फ़ाइल बनाने और इसे एक पायथन फ़ाइल में आयात करने का प्रयास करने के बाद test.py को निम्न त्रुटि फेंक दी गई है।सिथन उत्पन्न जेएसओ आयात करते समय इस आयात त्रुटि का क्या अर्थ है?
$ python3.2 test.py
Traceback (most recent call last):
File "test.py", line 12, in <module>
from queue import Queue
ImportError: dlopen(/Users/jeremy/Development/labs/python/cython_lib_wrapper/queue.so, 2): Symbol not found: _queue_free
Referenced from: /Users/jeremy/Development/labs/python/cython_lib_wrapper/queue.so
Expected in: flat namespace
in /Users/jeremy/Development/labs/python/cython_lib_wrapper/queue.so
.so फ़ाइल test.py फ़ाइल के ठीक आगे बैठती है। तो, ऐसा लगता है कि यह पाया जाना चाहिए। यह ओएसएक्स 10.6 पर पायथन 3.2 के साथ साइथन का नवीनतम संस्करण चला रहा है।
कोई अंतर्दृष्टि?
संपादित करें - कमान और उत्पादन का निर्माण जोड़ने
$ python3.2 setup.py build_ext --inplace
running build_ext
cythoning queue.pyx to queue.c
building 'queue' extension
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3 -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -I/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2m -c queue.c -o build/temp.macosx-10.6-intel-3.2/queue.o
queue.c: In function ‘__pyx_f_5queue_5Queue_append’:
queue.c:627: warning: cast to pointer from integer of different size
queue.c: In function ‘__pyx_f_5queue_5Queue_extend’:
queue.c:740: warning: cast to pointer from integer of different size
queue.c: In function ‘__pyx_f_5queue_5Queue_peek’:
queue.c:813: warning: cast from pointer to integer of different size
queue.c: In function ‘__pyx_f_5queue_5Queue_pop’:
queue.c:965: warning: cast from pointer to integer of different size
gcc-4.2 -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -isysroot /Developer/SDKs/MacOSX10.6.sdk -g build/temp.macosx-10.6-intel-3.2/queue.o -o
संपादित करें 2 - जोड़ने "otool" cmd टिप्पणी में अनुरोध
queue.so:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
संपादित 3 - जोड़ने "एनएम" उत्पादन
U ___stack_chk_fail
U ___stack_chk_guard
U _queue_free
U _queue_is_empty
U _queue_new
U _queue_peek_head
U _queue_pop_head
U _queue_push_tail
U dyld_stub_binder
ग्रेप cmd आउटपुट इस:
(undefined) external _queue_free (dynamically looked up)
यह एक लिंकिंग समस्या की तरह लगता है। क्या आप पुनर्निर्माण और निर्माण निर्माण और कमांड दोनों को यहां बनाने के लिए उपयोग कर सकते हैं? – stderr
@ माइक स्टेडर इसे देखने के लिए धन्यवाद, मैंने बिल्ड कमांड और आउटपुट – JeremyFromEarth
जोड़ा है ठीक है, बहुत भाग्य पुन: उत्पन्न नहीं कर रहा है तो चलिए थोड़ा और डिबगिंग करने का प्रयास करें। 'Nm queue.so' आज़माएं और देखें कि _queue_free के आगे क्या सूचीबद्ध है। 'Otool -L queue.so' का भी उपयोग करें और DYLD_LIBRARY_PATH ('echo $ DYLD_LIBRARY_PATH') देखने के लिए जांचें। – stderr