c++ - लिंकिंग त्रुटियों को डीबग करने के लिए सर्वोत्तम अभ्यास




visual-studio gcc (2)

सी ++ में परियोजनाओं का निर्माण करते समय, मैंने पाया है कि लिंकिंग त्रुटियों को डीबग करना मुश्किल है, खासकर जब दूसरे लोगों के कोड को उठाते हैं लिंकिंग त्रुटियों को डीबग करने और तय करने के लिए लोग क्या रणनीतियां करते हैं?


सी-रनटाइम पुस्तकालय अक्सर सबसे बड़ा अपराधी होता है सुनिश्चित करें कि आपके सभी प्रोजेक्ट्स की एक ही सेटिंग की गई है, एकल एकल बनाम बहु-थ्रेडिंग और स्थिर बनाम dll

एमएसडीएन दस्तावेज यह इंगित करने के लिए अच्छा है कि कौन सी लिब एक विशिष्ट Win32 API कॉल की आवश्यकता होती है,

इसके अलावा यह आम तौर पर वर्बोस ध्वज को चालू करने और सुराग की तलाश में आउटपुट के माध्यम से लुढ़का जाता है।


निश्चित नहीं कि आपके स्तर की विशेषज्ञता क्या है, लेकिन यहां मूल बातें हैं

नीचे वीएस 2005 से एक लिंकर त्रुटि है - हाँ, यह एक विशाल गड़बड़ है अगर आप इसे से परिचित नहीं हैं

ByteComparator.obj : error LNK2019: unresolved external symbol "int __cdecl does_not_exist(void)" (?[email protected]@YAHXZ) referenced in function "void __cdecl TextScan(struct FileTextStats &,char const *,char const *,bool,bool,__int64)" (?[email protected]@[email protected]@[email protected])

इस पर ध्यान देने के लिए कुछ बिंदु हैं:

  • "बाइट कॉमपरेटर.ओबीजे" - एक बाइट कॉमपाराराओसीपीपी फ़ाइल की तलाश करें, यह लिंकर समस्या का स्रोत है
  • "int __cdecl does_not_exist (शून्य)" - यह वह प्रतीक है जो इसे नहीं मिल सकता है, इस मामले में does_not_exist नामक फ़ंक्शन

इस बिंदु पर, कई मामलों में संकल्प का सबसे तेज तरीका इस फ़ंक्शन के लिए कोड बेस खोजना है और यह पता चलता है कि कार्यान्वयन कहाँ है। एक बार जब आप जानते हैं कि फ़ंक्शन को कार्यान्वित किया गया है, तो आपको यह सुनिश्चित करना होगा कि दो जगह एक साथ मिल जाएंगे।

यदि आप VS2005 का उपयोग कर रहे हैं, तो आप "प्रोजेक्ट निर्भरता ..." राइट-क्लिक मेनू का उपयोग करेंगे। यदि आप जीसीसी का उपयोग कर रहे हैं, तो आप निष्पादन योग्य पीढ़ी चरण (.सी फाइल के एक समूह के साथ बुलाए गए जीसीसी) के लिए अपनी मेकफाइल में देखेंगे और गायब। ओ फाइल को जोड़ देंगे।

एक दूसरे परिदृश्य में, आप "बाहरी" निर्भरता, जिसमें आपके पास कोड नहीं है, गायब हो सकता है। Win32 लाइब्रेरी अक्सर बार-बार स्थैतिक पुस्तकालयों में कार्यान्वित होते हैं जिन्हें आपको लिंक करना पड़ता है। इस स्थिति में, एमएसडीएन या "माइक्रोसॉफ्ट गूगल" पर जाएं और एपीआई की तलाश करें। एपीआई विवरण के नीचे लाइब्रेरी का नाम दिया गया है। इसे अपनी प्रोजेक्ट प्रॉपर्टी में जोड़ें "कॉन्फ़िगरेशन गुण-> लिंकर-> इनपुट-> अतिरिक्त निर्भरता" सूची। उदाहरण के लिए, MSDN पर फ़ंक्शन का टाइम गेटटाइम () का पृष्ठ आपको पृष्ठ के नीचे Winmm.lib का उपयोग करने के लिए कहता है।





compilation