मैंने हाल ही में विजुअल स्टूडियो 2010 स्थापित किया और मेरे प्रोजेक्ट के लिए समाधान फाइलें उत्पन्न करने के लिए सीएमके का इस्तेमाल किया। इस प्रक्रिया ने पहले वीएस2005 पर ठीक काम किया था।वीसी 8 से वीसी 10 - एलएनके2005 त्रुटियां
मुझे जो पहला मुद्दा सामने आया वह नए "चालक रचनाकारों" के कारण था, इसलिए मुझे अपने कोड — मेले से कुछ अंतर्निहित रूपांतरणों को दूर करना पड़ा, जो अब काम करता है।
मेरे वर्तमान स्थिति इस प्रकार है: मैं DLL 1 है, जो केवल कुछ प्रणाली पुस्तकालयों (Kernel32, आदि) और CRT पर निर्भर है, और संकलन कर रहा हूँ DLL 2, जो DLL 1 के लिए लिंक, साथ ही कुछ तृतीय पक्ष पुस्तकालयों।
त्रुटियों मैं की तर्ज पर कर रहे हैं:
DLL1.lib(DLL1.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) already defined in objFromDLL2.obj
यही समस्या वर्णित here प्रतीत होता है।
हालांकि, इस धागे में कुछ भी मेरी समस्या हल नहीं करता है।
- मैंने पुष्टि की है कि दोनों DLL1 और DLL2/एमडी कोड जनरेशन ध्वज के साथ संकलित किया गया है,
- DLL2 लिंक तोड़ो, Glew, और शैतान — मैं मैन्युअल रूप से इन और किसी भी पुस्तकालयों वे निर्भर के सभी कंपाइल किया है पर VC10 के लिए, यह भी साथ/एमडी
- संपादित प्रति this article (जो मेरी समस्या के समान है) के रूप में, मैं std :: कंटेनर से पाने वर्गों में से किसी उदाहरण को हटा दिया है
- संपादित करें मैंने पुष्टि की है कि यह तीसरी पार्टी समस्या नहीं है, क्योंकि मैंने पुस्तकालयों के एक ही सेट का सफलतापूर्वक उपयोग करके एक और परियोजना संकलित की है, हालांकि मैं अभी भी अपनी मूल परियोजना
- संपादित करें संपादित करें मेरे सभी आवश्यक स्थानों में dllexport का उपयोग किया जा रहा है कोड
मुझे क्या याद आ रही है? अगर मुझे और जानकारी प्रदान करने की ज़रूरत है तो कृपया मुझे बताएं और मैं इस प्रश्न को जितना संभव कर सकता हूं उतना संपादित कर दूंगा।
अद्यतन: यह थोड़ी देर हो गया है और मेरे पास अभी भी कोई समाधान नहीं है। मैं टिप्पणियों के जवाबों के साथ प्रश्न अद्यतन कर रहा हूं, और मैं वर्तमान में एक अलग कोडबेस पर काम कर रहा हूं जो काम करता है - मुझे लगता है कि पुराने कोड के लिए पिछली संगतता अंततः सूखने लगी है, और मुझे बस आगे बढ़ो।
अधिक अद्यतन: मैंने पाया क्या शायद एक बहुत ही अवांछनीय लिंकर झंडा,/बल दिया गया है: कई है, जो सभी लेकिन प्रतीकों की पहली परिभाषा की अनदेखी करके चेतावनी में त्रुटियों बदल जाता है। ऐसा करने के खराब दुष्प्रभाव होना चाहिए। इस ध्वज के एक परीक्षण ने एलएनके 2001 को हाइलाइट किया: अनसुलझा std :: string :: npos, जिसे पिछले सभी LNK2005 त्रुटियों में दफनाया गया था। यातना कभी खत्म नहीं होती है।
क्या आप सुनिश्चित हैं कि तीसरे पक्ष के पुस्तकालयों में से कोई भी _other_ पुस्तकालयों से लिंक नहीं है? –
@daupic शैतान कई अन्य पुस्तकालयों का उपयोग करता है, जिसे मैंने वीसी 10 के साथ भी संकलित किया है। प्रश्न को हाइलाइट करने के लिए संपादित किया गया। – badgerr
मेरा प्रारंभिक अनुमान यह है कि विभिन्न सीआरटी लिंक का उपयोग करते हुए शैतान विभिन्न पुस्तकालयों के साथ लिंक करता है; वैकल्पिक रूप से, आपने गलती से डीबग में पुस्तकालयों में से एक बनाया है। –