2010-11-01 6 views
43

सी ++ में, आपको हेडर फाइलें (.h), (.lib) फ़ाइलें और (.dll) फ़ाइलें मिलीं।विजुअल स्टूडियो अतिरिक्त निर्भरताओं का उपयोग कब करें?

दृश्य स्टूडियो में, आप तीन अलग अलग स्थानों में इन फ़ाइलों के लिए खोज करने के लिए स्थान प्रदान करते हैं:

  1. विन्यास गुण => C/C++ => सामान्य => अतिरिक्त निर्देशिका को शामिल करें। यहां आप "शामिल" निर्देशिकाएं सूचीबद्ध करते हैं जिन्हें आप खोजना चाहते हैं और उपलब्ध कराए गए हैं।

  2. कॉन्फ़िगरेशन गुण => लिंकर => सामान्य => अतिरिक्त लाइब्रेरी निर्देशिकाएं। यहां आप "lib" निर्देशिकाएं सूचीबद्ध करते हैं जिन्हें आप खोजना और उपलब्ध कराना चाहते हैं।

  3. कॉन्फ़िगरेशन गुण => लिंकर => इनपुट => अतिरिक्त निर्भरताएं। यहां आप स्पष्ट रूप से उन .lib फ़ाइलों को निर्दिष्ट करते हैं जो शामिल करना चाहते हैं।

प्रश्न हैं:

Q1: आप # 1 में हेडर फाइल और # 2, क्यों में lib निर्दिष्ट है/जब तुम # 3 में कुछ भी निर्दिष्ट करना चाहते हैं?

प्रश्न 2: मैं # 3 में एक विशिष्ट डीबग या रिलीज संस्करण सहित लोगों को देखता हूं। क्या आप या तो # 3 में lib के डीबग या रिलीज़ संस्करण को निर्दिष्ट कर सकते हैं और अभी भी रिलीज़ या डीबग मोड में बना सकते हैं? आदर्श रूप से, पुस्तकालय डीबग/रिलीज का कौन सा संस्करण यहां प्रदान किया जाना चाहिए?

उत्तर

30
  1. विन्यास गुण => C/C++ => सामान्य => अतिरिक्त शामिल निर्देशिका। यहां आप "शामिल" निर्देशिका सूचीबद्ध करते हैं जिन्हें आप खोजना चाहते हैं और उपलब्ध कराए गए हैं।

इस संकलक जहां कोण कोष्ठक में हेडर फाइल देखने के लिए कहता है। यह इस बात को प्रभावित करता है कि संकलक (या प्रीप्रोसेसर) यह कैसे काम करता है।

  1. कॉन्फ़िगरेशन गुण => लिंकर => सामान्य => अतिरिक्त लाइब्रेरी निर्देशिकाएं। यहां आप "lib" निर्देशिकाएं सूचीबद्ध करते हैं जिन्हें आप खोजना चाहते हैं और उपलब्ध कराए गए हैं।

यह लिंकर जहां पुस्तकालयों (जैसे कि, क्या निर्देशिका में देखने के लिए) के लिए देखने के लिए कहता है। यह इस बात को प्रभावित करता है कि कैसे लिंकर (कंपाइलर के बजाए) अपना काम करता है।

  1. कॉन्फ़िगरेशन गुण => लिंकर => इनपुट => अतिरिक्त निर्भरताएं। यहां आप स्पष्ट रूप से उन .lib फ़ाइलों को निर्दिष्ट करते हैं जो शामिल करना चाहते हैं।

यह लिंकर को बताता है कि पुस्तकालयों को उन निर्देशिकाओं में क्या देखना है। इससे यह भी प्रभावित होता है कि लिंकर इसका काम कैसे करता है।

प्रश्न 1: आम तौर पर यदि आप 2 का उपयोग करते हैं, तो आपको लगभग 3 का उपयोग करने की आवश्यकता होती है। 3 बताता है कि किस लाइब्रेरी से लिंक करना है, और 2 बताता है कि उस पुस्तकालय को कहां ढूंढना है। बेशक, यह एक से अधिक पुस्तकालय भी हो सकता है।

प्रश्न 2: यदि एक डीबग और रिलीज लाइब्रेरी दोनों प्रदान की जाती हैं, तो आप आमतौर पर डिबग बिल्ड में डिबग संस्करण और रिलीज़ संस्करण में रिलीज़ संस्करण का उपयोग करना चाहते हैं। संवाद के ऊपरी-बाएं कोने में आप चुनते हैं कि आप किस कॉन्फ़िगरेशन को संशोधित करना चाहते हैं। आम तौर पर आप डीबग और रिलीज दोनों के लिए निर्देशिका निर्दिष्ट करना चाहते हैं, लेकिन व्यक्तिगत पुस्तकालयों को निर्दिष्ट करें, एक डीबग के लिए और एक रिलीज के लिए।

+1

धन्यवाद! एक काउंटर उदाहरण, जो अभी भी मुझे भ्रमित करता है ... मैं बूस्ट पुस्तकालयों, टोकनेज़र में से एक का उपयोग कर रहा हूं। तो # 1 के लिए, मैं \ शामिल निर्देशिका का स्थान निर्दिष्ट करता हूं, और फिर मेरी .cpp फ़ाइल में, मैं बस करता हूं: # "boost/tokenizer.hpp" शामिल करें, और ऐसा करना कि मेरा प्रोग्राम सफलतापूर्वक चलता है। - प्रश्न 3: मुझे कैसे \ lib लाइब्रेरी का स्थान शामिल करना नहीं था (उदाहरण के लिए # 2 खाली छोड़ दिया गया था) और इसी तरह # 3 के लिए (उदाहरण के लिए यदि मैंने सटीक लाइब्रेरी निर्दिष्ट नहीं की है तो मैं कैसे सक्षम था उस पुस्तकालय से जुड़ने के लिए)। धन्यवाद! – user205834

+2

@ user205834: कुछ संभावनाएं हैं। सबसे पहले, बहुत सारे बूस्ट हेडर-केवल पुस्तकालय हैं - यानी, सभी कोड शीर्षलेख में हैं, और आपको इसका उपयोग करने के लिए किसी भी चीज़ से लिंक करने की आवश्यकता नहीं है। दूसरा, पुस्तकालयों का उपयोग करने वाले हिस्सों के लिए, वे आमतौर पर लाइब्रेरी से स्वचालित रूप से लिंक करने के लिए '#pragma टिप्पणी (lib, "libname")' का उपयोग करते हैं। –

3

और केवल स्पष्ट इंगित करने के लिए, आपको अपनी प्रोजेक्ट की प्रॉपर्टी सेटिंग में उपयोग करने वाली किसी भी .h फ़ाइलों को जोड़ने की ज़रूरत नहीं है क्योंकि आप उन्हें अपने स्रोत कोड में स्पष्ट रूप से शामिल करते हैं, जो हेडर को ढूंढता है पथ जो आपने पहले ही प्रदान किए हैं।

2

इसके अलावा, उन उपरोक्त स्थानों में, जब आप निर्देशिका में जोड़ते हैं, तो मैक्रोज़ >> बटन देखें। उदा। आप 32 बिट/64 बिट/रिलीज और डीबग के लिए विभिन्न पुस्तकालयों का उपयोग करना चाह सकते हैं। आप रिश्तेदार लिंक देने के लिए ($ ProjectDir) मैक्रो का उपयोग कर सकते हैं, और उदा। ($ DXSDK_DIR) मैक्रो यह सुनिश्चित करने के लिए कि आपको अपने डायरेक्टएक्स विकास के लिए सही libs मिलें।

तो मेरे पास ($ DXSDK_DIR) \ Lib \ x86 और ($ DXSDK_DIR) \ Lib \ x64 है जो विकास के लिए 32 बिट और 64 बिट विंडोज ओएस के बीच चलते समय समस्या को दूर करता है।

1
अपने Q2 के बारे में

...

3 पक्ष के पुस्तकालयों के लिए, मैं ले दृश्य स्टूडियो का लाभ कमान मैक्रो चर बनाएँ $(Platform) और $(Configuration) कुछ इस तरह दर्ज करें:

Y:\dev3\cpp\cryptopp\cryptopp561\$(Platform)\Output\$(Configuration);... 

इस तरह, आप केवल वही सटीक रेखा दर्ज कर सकते हैं और विजुअल स्टूडियो मैक्रो वैरिएबल को प्रतिस्थापित कर सकते हैं और \cryptopp561\Win32\Output\Release\ या \cryptopp561\Win32\Output\Debug\ में देख सकते हैं कि आप किस कॉन्फ़िगरेशन को सक्रिय करते हैं। यह वास्तव में ज्यादा टाइपिंग नहीं बचाता है लेकिन यह चीजों को लगातार और सटीक रखने में मदद करता है।

+0

यह $ (ConfigurationName) होना चाहिए, है ना? – vidstige

+0

नहीं, मेरी परियोजनाओं में मैं $ (कॉन्फ़िगरेशन) का उपयोग करता हूं। मैंने सिर्फ $ (ConfigurationName) के लिए प्रलेखन पढ़ा है और मुझे लगता है कि यह भी काम करेगा लेकिन मैंने इसका परीक्षण नहीं किया है। – JasDev

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