5

मैं कुछ समय से विजुअल स्टूडियो का उपयोग कर रहा हूं, मुख्य रूप से सी ++ के लिए विकसित कर रहा हूं। मुझे अक्सर समाधान बनाने की आवश्यकता होती थी, जिसमें एकाधिक मॉड्यूल (प्रोजेक्ट्स) होते थे - उदाहरण के लिए उपयोगिता लाइब्रेरी, जिसमें .dll फाइलें शामिल थीं।विजुअल स्टूडियो में सी ++ प्रोजेक्ट के संदर्भ जोड़ने के क्या परिणाम हैं?

जब एक मॉड्यूल (ए) एक और (बी) का उपयोग करने के लिए की जरूरत है, इसके लिए मानक पैटर्न है:

  1. आवश्यक हेडर शामिल करें।
  2. बी से लिंक आउटपुट लाइब्रेरी फ़ाइल (उदाहरण के लिए, वीएस में: प्रोजेक्ट कॉन्फ़िगर ->Linker ->Input ->Additional Dependencies ->'B.lib')।
  3. [वैकल्पिक] सेटअप उचित निर्माण आदेश (इसलिए बी ए से पहले बनाया गया है)।

हाल ही में मैं, के साथ सी # चारों ओर खेलने के लिए शुरू कर दिया है क्योंकि मैं (यह बहुत आसान है, सी ++ और क्यूटी या wxWidgets जैसे बाहरी पुस्तकालयों का उपयोग करने से) इसके साथ मेरी इंजन के लिए कुछ जीयूआई आधारित उपकरण विकसित करने का फैसला। जब मुझे पता चला

enter image description here

मैं बहुत हैरान था, कि यह विकल्प भी सी ++ परियोजनाओं के लिए लागू होता है: मुझे पता चला, सी # में, इस तरह निर्भरता 'संदर्भ' का उपयोग कर स्थापित कर रहे हैं कि!

वास्तव में, मैंने नमूना समाधान बनाया और इस तरह निर्भरताओं को सेट करने के बाद, सब कुछ ठीक काम कर रहा था, बिना किसी अतिरिक्त कॉन्फ़िगरेशन जैसे "लिंकर इनपुट" या कुछ।

मेरा प्रश्न है: बिल्कुल इस विकल्प सी ++ परियोजनाओं के लिए क्या करता है? मुझे सभी मुनाफे और संभावित व्यापार-बंद में दिलचस्पी है।

मुझे पहले से ही पता है, यह अन्य परियोजनाओं से निर्भरता के रूप में सेट आउटपुट का कारण बनता है। और कुछ? शायद संदर्भित मॉड्यूल के बीच कुछ रनटाइम निर्भरताएं? यह जेनरेट आउटपुट को कैसे प्रभावित करता है?

+0

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

+0

इसके अलावा, चूंकि आपने डीएलएल का उल्लेख किया है, हां प्रोजेक्ट संदर्भ बिल्ड आउटपुट, .lib आयात लाइब्रेरी और रनटाइम के लिए डीएलएल दोनों में खींच जाएगा। –

उत्तर

7

यह मूल रूप से का उपयोग केवल सी ++/सीएलआई परियोजनाओं में किया जाना था। और एक ही चीज है जो सी # प्रोजेक्ट के संदर्भ जोड़ती है, आप .NET संदर्भ असेंबली चुनते हैं जिन्हें आपको संकलित करने के लिए प्रोजेक्ट प्राप्त करने की आवश्यकता होती है।

लेकिन इसने कई सी ++ प्रोग्रामर को भ्रमित कर दिया, उन्होंने सोचा कि इसमें कुछ आम तौर पर उपयोगी होना चाहिए। शायद क्योंकि यह "सामान्य गुण" शीर्षक के अंतर्गत है। इसके बारे में बहुत सारे प्रश्न।

वीएस -2010 को फास्ट फॉरवर्ड, एक संस्करण जो अधूरा था। उन कुछ मामलों में से एक जहां माइक्रोसॉफ्ट प्रोजेक्ट ने अपनी इच्छित शिपिंग तिथि को खत्म कर दिया। बग-सूची को कम करने के लिए उन्हें अतिरिक्त 6 सप्ताह मिल गए। लेकिन यह पर्याप्त नहीं था, यह सुविधा निर्भरता को जोड़ने के लिए आसान बनाना था not actually implemented या अक्षम।

तो वीएस2012 में उन्होंने इसे एक अलग तरीके से करने का निर्णय लिया और मूल संदर्भ सी/सी ++ परियोजना के लिए संदर्भ जोड़ें। आप हमेशा एक परियोजना संदर्भ चुनते हैं, इसे एक स्थिर पुस्तकालय या एक डीएलएल परियोजना होना चाहिए। एक जो एक .lib फ़ाइल उत्पन्न करता है। और यह स्वचालित रूप से लिंकर को उस .lib फ़ाइल को लिंक करने के लिए कहता है। कुछ और नहीं, यह लिंकर कमांड लाइन में .lib फ़ाइल को जोड़ता है। अच्छा काम करता है।

अद्यतन: वीएस2015 के लिए फिर से बदला गया, अब इसमें एक संदर्भ नोड है।किसी अन्य प्रोजेक्ट में संदर्भ जोड़ने के लिए राइट-क्लिक करें।

+1

'लिंकर इनपुट' या'pragma टिप्पणी' के मैन्युअल संपादन के साथ गड़बड़ करने से कहीं अधिक स्पष्ट लगता है। –

+0

"... इसे एक स्थिर पुस्तकालय या एक डीएलएल प्रोजेक्ट होना चाहिए। वह एक .lib फ़ाइल उत्पन्न करता है।" - लेकिन केवल एक स्थैतिक पुस्तकालय .lib फ़ाइल उत्पन्न करता है, जबकि एक डीएलएल प्रोजेक्ट एक .lib फ़ाइल उत्पन्न नहीं करता है, है ना? – athos

+1

यह आयात पुस्तकालय करता है। इसे किसी भी प्रोजेक्ट से लिंक करने की आवश्यकता है जो डीएलएल का उपयोग करता है ताकि लिंकर जानता है कि एक पहचानकर्ता किसी अन्य निष्पादन योग्य फ़ाइल में मौजूद है। –

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