2010-10-08 17 views
6

के साथ पाइथन स्थैतिक लाइब्रेरी को कैसे लिंक करें मैं एक सी ++ प्रोग्राम लागू कर रहा हूं जो पायथन/सी ++ एक्सटेंशन का उपयोग करता है। अभी तक मैं स्पष्ट रूप से संकलित स्थिर पुस्तकालय को पाइथन पर अपने प्रोग्राम को जोड़ रहा हूं। मैं सोच रहा हूँ वहाँ प्रणाली स्थापित अजगर (मैं डिफ़ॉल्ट अजगर स्थापना कि लिनक्स के साथ आता है मतलब)मेरे सी ++ प्रोग्राम

उत्तर

14

हाँ के साथ अपने कार्यक्रम से जोड़ने के लिए किसी भी तरह से है। वहाँ एक कमांड लाइन उपयोगिता कहा जाता है:

Usage: /usr/bin/python-config [--prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--help] 

लिंकेज प्रयोजनों के लिए, आप --ldflags पैरामीटर के साथ यह आह्वान किया है।

: यह भी आप --cflags पैरामीटर के साथ संकलन करने के लिए झंडे दे सकते हैं

$ python-config --ldflags 
-L/usr/lib/python2.6/config -lpthread -ldl -lutil -lm -lpython2.6 

: यह आप प्रणाली स्थापित अजगर पुस्तकालयों के साथ लिंक करने के लिए लिंकर (या g++) को भेजना है झंडे की एक सूची प्रिंट होगा

$ python-config --cflags 
-I/usr/include/python2.6 -I/usr/include/python2.6 -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes 

आप test.cpp फ़ाइल में एक परीक्षण कार्यक्रम है कहो, तो आप आदेश को संकलित करने और लिंक में कुछ इस तरह कर सकते हैं:

g++ $(python-config --cflags) -o test $(python-config --ldflags) ./test.cpp 

वह आपके प्रोग्राम को साझा पुस्तकालयों से जोड़ देगा। यदि आप स्थैतिक जाना चाहते हैं, तो आप लिंकर को -static विकल्प पास कर सकते हैं। लेकिन वह रनटाइम समेत सभी स्थैतिक सामानों से लिंक होगा। यदि आप स्थिर पायथन के साथ जाना चाहते हैं, तो आपको उन पुस्तकालयों को स्वयं ढूंढना होगा। विकल्प में से एक है python-config --ldflags आउटपुट पार्स करना और .a एक्सटेंशन वाले पुस्तकालयों को देखना। लेकिन मैं बल्कि सभी गतिशील या सभी स्थिर के लिए चिपके रहना होगा।

उम्मीद है कि यह मदद करता है। सौभाग्य!

+1

हाय Vlad, आप प्रतिक्रिया के लिए बहुत बहुत धन्यवाद .. लेकिन दुर्भाग्य से मैं/usr/bin में/मैं Fedora13 पर हूँ किसी भी अजगर-config टूल दिखाई नहीं दे रहा हूँ। क्या आपको लगता है कि यह मंच पर निर्भर हो सकता है ?? – neuron

+1

क्या आपके पास पाइथन विकास आरपीएम स्थापित है? यह मुझे लगता है कि एसडीके का एक हिस्सा है। मैं इसे दोनों उबंटू 10.4 और फेडोरा 12. तुम बस शायद आवश्यक पैकेज स्थापित नहीं पर है। –

+1

अरे .. धन्यवाद !! – neuron

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