2012-06-05 19 views
7

मैं इस शब्द को "प्रतीक निर्यात करना" ढूंढ रहा हूं। प्रतीक का निर्यात सी/सी ++ में या पुस्तकालयों (साझा/स्थैतिक) के संबंध में क्या होता है? हम कहां से निर्यात करते हैं और क्यों? कंपाइलर द्वारा नामित नाम के साथ प्रतीक निर्यात करने का संबंध क्या है?प्रतीक का निर्यात करने का क्या अर्थ है?

+0

_declspec (dllimport/export) के लिए देखो, मुझे यकीन है कि आप महान स्पष्टीकरण पा सकते हैं। –

+2

इसके अलावा, सवाल कम नहीं किया गया था क्योंकि यह एक डुप्लिकेट था, लेकिन संभवतः क्योंकि आपको डुप्लीकेट्स द्वारा सुझाव दिया गया था और आपने सुझावों को अनदेखा किया था। –

+1

यह ऑफटॉप क्यों है? – littleadv

उत्तर

16

प्रतीक का निर्यात करने से आपके ऑब्जेक्ट फ़ाइल/लाइब्रेरी में इसका अस्तित्व "विज्ञापन" होता है और यह कहां है, ताकि इसे अन्य मॉड्यूल द्वारा आयात किया जा सके (= से जुड़ा हुआ)।

लिंक स्थिर या गतिशील रूप से किया जा सकता है, लेकिन किसी भी तरह से लिंकर को यह पता होना चाहिए कि प्रतीक क्या है, और यह कहां है, और निर्यातित प्रतीक और आयातित प्रतीक इसके लिए मेल खाना चाहिए। नाम मैंगलिंग उस से संबंधित है (सी ++ नाम मैंगलिंग में प्रतीक नाम में प्रतीक की प्रकार परिभाषा शामिल है, और निर्यातित और आयातित प्रतीक की उलझन को आयात-निर्यात को सही ढंग से लिंक करने के लिए लिंकर के लिए मेल खाना चाहिए)।


उदाहरण:

मान लीजिए आप एक पुस्तकालय "STANDARDC" (यादृच्छिक नाम) और अपने कार्यक्रम SOMEPROG है। कार्यक्रम SOMEPROG को कंसोल पर प्रिंट करने की आवश्यकता है, इसलिए यह printf पर कॉल करेगा। लेकिन आप वास्तव में अपने प्रोग्राम SOMEPROG में printf को लागू नहीं करते हैं, तो आप इसे अन्यत्र उपयोग करते हैं (= इसे आयात करें), जबकि कार्यान्वयन कहीं और है।

लाइब्रेरी मानक कार्ड में निर्यात के प्रतीकों की एक सूची है जिसमें उस पुस्तकालय में लागू सभी कार्यों को शामिल किया गया है और इसे बाहर (= निर्यात किए गए कार्यों) से बुलाया जा सकता है। printf ऐसे कार्यों में से एक है, इसलिए यह निर्यात की गई सूची में दिखाई देगा।

कंपाइलर आपके SOMEPROG.C के माध्यम से जाता है और देखता है कि आप printf का संदर्भ देते हैं, लेकिन इसके लिए कोई कार्यान्वयन नहीं है। संकलक printf को परिणामी SOMEPROG.obj के लिए आयातित प्रतीकों की सूची में जोड़ता है, लिंकर के लिए वास्तविक कार्यान्वयन को जोड़ने के लिए

लिंकर आपकी SOMEPROG.obj फ़ाइल और STANDARDC .lib फ़ाइल लेता है, और देखता है SOMEPROG.obj में कौन से फ़ंक्शंस का उपयोग किया जाता है। लिंकर को पता चलता है कि printf लागू नहीं किया गया है, इसे आयात किया जाता है, इसलिए लिंकर अपनी सभी .lib फ़ाइलों को देखता है और मानक कार्ड की निर्यात सूची में printf से मेल खाता है। यह STANDARDC से printf का कार्यान्वयन करता है और इसे आपके प्रोग्राम में लिंक करता है जहां आप आयातित प्रतीक printf का संदर्भ देते हैं।

+1

क्या आप उदाहरण के साथ समझा सकते हैं। मैं अपना प्रतीक क्यों निर्यात करना चाहता हूं? – Raulp

+1

@softy ने एक उदाहरण जोड़ा। – littleadv

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