मैं एक पुस्तकालय है कि एक द्विआधारी lib (ए) और हेडर के रूप में वितरित किया जाता है लिया है मैक ओएस पर dlopen के साथ समस्याओं, इसके खिलाफ कुछ C++ कोड लिखा है, और एक अजगर में परिणाम लपेट करना चाहते हैं मॉड्यूल।अजगर सी विस्तार,
मैं इस here किया है।
समस्या है जब (मैं 10.5 और 10.6 की कोशिश की है) पर मैक OSX इस मॉड्यूल का आयात, मैं निम्नलिखित त्रुटि मिलती है कि:
dlopen(/Library/Python/2.5/site-packages/dirac.so, 2): Symbol not found: _DisposePtr
Referenced from: /Library/Python/2.5/site-packages/dirac.so
Expected in: dynamic lookup
यह कार्बन ढांचे में परिभाषित प्रतीकों की तरह लग रहा नहीं कर रहे हैं ठीक तरह से हल किया जा रहा है, लेकिन मुझे यकीन नहीं है कि इसके बारे में क्या करना है। मैं -framework Carbon
distutil.core.Extension
के extra_link_args
पैरामीटर की आपूर्ति कर रहा हूं, इसलिए मुझे यकीन नहीं है कि मुझे और क्या करना चाहिए।
किसी भी मदद की बहुत सराहना की जाएगी।
अद्यतन:
संकलन setup.py द्वारा उत्पन्न लाइन इस तरह दिखता है:
gcc -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -dynamic -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DMACOSX -I/usr/include/ffi -DENABLE_DTRACE -arch i386 -arch ppc -pipe -Isource -I/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/numpy/core/include -I/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/numpy/numarray -I/usr/lib/python/2.5/site-packages/numpy/numarray/numpy -I/usr/lib/python/2.5/site-packages/numpy/numarray -I/usr/lib/python/2.5/site-packages/numpy/core/include -I/System/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 -c source/Dirac_LE.cpp -o build/temp.macosx-10.5-i386-2.5/source/Dirac_LE.o
लिंकर लाइन इस तरह दिखता है:
g++ -Wl,-F. -bundle -undefined dynamic_lookup -arch i386 -arch ppc build/temp.macosx-10.5-i386-2.5/diracmodule.o build/temp.macosx-10.5-i386-2.5/source/Dirac_LE.o -Llibs/MacOSX -lDiracLE -o build/lib.macosx-10.5-i386-2.5/dirac.so -framework Carbon
otool
रिपोर्ट:
dirac.so:
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.5)
अद्यतन 2: MacOS 10.5 पर, RTLD_LAZY
को RTLD_NOW
के डिफ़ॉल्ट से dlopen झंडे को संशोधित समस्या का हल। हालांकि, यह मैक ओएस 10.6 पर काम नहीं करता है।
10.6 पर, निम्न क्रम हालांकि मुझे यकीन है कि क्यों नहीं कर रहा हूँ, पुस्तकालय ठीक से चलाने के लिए अनुमति देता है:
- अजगर setup.py निर्माण -v
- लिंकर लाइन को चलाने (द्वारा सांत्वना देने मुद्रित setup.py) फिर से, मैन्युअल रूप से।
- अजगर
मैं अभी भी यह कैसे ठीक से काम करने के लिए के रूप में एक अच्छा जवाब के लिए देख रहा हूँ स्थापित setup.py। धन्यवाद!
वास्तविक संकलक क्या है कमांडलाइन जो setup.py निष्पादित करता है? 'बिल्ड' निर्देशिका हटाएं और देखने के लिए' setup.py build -v' चलाएं। इसके अलावा, 'otool -L'' dirac.so' फ़ाइल के बारे में क्या कहता है? –
@ थॉमस, मैंने उस जानकारी के साथ प्रश्न अपडेट किया है, धन्यवाद। –
यह ठीक दिखता है; -फ्रेमवर्क तर्क संभावित स्थान पर है।केवल एक चीज जो मैं कल्पना कर सकता हूं वह यह है कि आपको एक अलग ढांचे की आवश्यकता है, या ढांचा को श्लिब निर्भरता पेश करना है और किसी भी तरह से नहीं है (मुझे नहीं पता कि कार्बन ढांचे को ऐसा करना है या नहीं।) –