2010-06-20 13 views
5

मैंने इस बारे में सोचा है और मुझे वास्तव में एक निश्चित उत्तर नहीं मिला है। क्या किसी अन्य boost.python मॉड्यूल के विरुद्ध लिंक करने के लिए boost.python ढांचे के भीतर यह संभव है।मौजूदा बूस्ट पायथन मॉड्यूल से लिंक कैसे करें

उदाहरण के लिए मैंने boost_python_module (libA) के भीतर कक्षा ए निर्यात किया है और boost_python_module (libB) के भीतर फ़ंक्शन बी (ए ए) निर्यात किया है। LibA के ए से लिंक करने के लिए libB में निर्दिष्ट करना संभव है।

इस समस्या को देखने का दूसरा तरीका यह होगा कि अभी मुझे एक मॉड्यूल के भीतर एक शॉट में अपनी सभी बाइंडिंग जेनरेट करना होगा। क्या कई boost_python_module पर बाध्यकारी उत्पन्न करना संभव है।

+0

यह प्रश्न बहुत पुराना है, इसलिए मुझे यकीन नहीं है कि अगर बूस्ट ने कुछ तय किया है, या ओपी ने थोड़ा विस्तार किया है, लेकिन मैंने इस व्यवहार को बूस्ट संस्करण 1.48 के साथ नहीं देखा है। जब आप एक ही प्रकार का उपयोग करके दो बूस्ट :: पायथन मॉड्यूल को अलग से संकलित करते हैं, तो आप एक बूस्ट पायथन मॉड्यूल द्वारा बनाए गए एक फ़ंक्शन में एक बूस्ट पायथन मॉड्यूल द्वारा बनाए गए एक उदाहरण को पास कर सकते हैं। – enobayram

उत्तर

0

मुझे अच्छी तरह से साझा लाइब्रेरी नहीं पता है, लेकिन मेरे लिए क्या काम करता है मेरे सभी मॉड्यूल आयात करना है, जो एक दूसरे के साथ पाइथन के भीतर संदर्भित कर सकते हैं: import libA; import libB

इन आयातों को __init__.py फ़ाइल में रखना संभव है, ताकि आपको श्वेत पाइथन को बस करना होगा: import myLib

+0

हाय राफक, समस्या तब होती है क्योंकि सी ++ कोड के लिए libA और libB और wrappers। मैं libA से libb में किसी फ़ंक्शन में ऑब्जेक्ट को कैसे पास कर सकता हूं। -संदीप – Sandeep

+0

अगर मैं समझदारी को समझता हूं, तो मुझे जो भी चाहिए वो करने में मुझे कोई समस्या नहीं है। मुझे लगता है कि निर्यात किए गए प्रकारों के लिए कुछ प्रकार का वैश्विक रजिस्टर है। तो मैं पहले libA आयात करूंगा (जिस पर libB निर्भर करता है क्योंकि यह कक्षा ए का उपयोग करता है) और फिर libB। आपको क्या त्रुटि है (यदि कोई है) क्या आपको मिलता है? – rafak

+0

मेरा मानना ​​है कि मुझे वास्तव में एक ही समस्या है - मेरे पास कई अलग-अलग बढ़ावा :: पायथन परियोजनाएं हैं जो पारस्परिक हैं। एक में परिभाषित एक प्रकार पाइथन में दूसरे में उपलब्ध नहीं प्रतीत होता है। मुझे "+ to_python (by-value) कनवर्टर सी ++ प्रकार" त्रुटियों के लिए मिला है। यदि मैं एक ही एक्सटेंशन मॉड्यूल से लपेटता हूं तो ये दूर हो जाते हैं ... –

1

Boost.Python जिस तरीके से आप पूछ रहे हैं उसे संभालने का तरीका संकलन इकाइयों as explained in the tutorial में अपने पैकेज को विभाजित करना है और बाद में मुख्य संकलन इकाई में विलय करना है जो वास्तव में मॉड्यूल घोषित करता है।

आप Boost.Python में स्वतंत्र मॉड्यूल को लिंक नहीं कर सकते क्योंकि वे आपके मॉड्यूल को लोड करते समय पाइथन द्वारा निष्पादित विशिष्ट पायथन प्रविष्टि बिंदु घोषित करते हैं। उदाहरण के लिए, यदि बाइनरी मॉड्यूल का नाम mod.so है, तो पाइथन दुभाषिया init_mod नामक फ़ंक्शन की तलाश करेगा (जो BOOST_PYTHON_MODULE(mod) घोषित करता है) और उस फ़ंक्शन के कोड को निष्पादित करता है। उस फ़ंक्शन के कोड के भीतर, यह ऑब्जेक्ट्स (उदाहरण, कक्षाएं, आदि) के पाइथन सी-एपीआई घोषणाओं को ढूंढने की अपेक्षा करता है।

आप लिंक करते हैं, उदाहरण के लिए, एक और मॉड्यूल बाइनरी (जैसे कि, foo.so) को mod.so द्विआधारी, जब अजगर भार mod.so, यह होगा केवल खोजें और init_mod निष्पादित और init_foo अनदेखी करेंगे।

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