5

मेरे पास एक पुरानी परियोजना है जो VS2005 (दुख की बात) में संकलित है। इसे वीएस2005 में रहना है, इसलिए यह वीएस2005 सीआरटी, एमएफसी इत्यादि के साथ ठीक से लिंक कर सकता है।पुरानी एसटीडी लाइब्रेरी और विंडोज़ के खिलाफ संकलन करने का प्रयास करते समय लिंक त्रुटियां एसडीके

अब मुझे पुराने वीएस2005 टूलसेट का उपयोग करके इस परियोजना को वीएस2015 में संकलित करने की आवश्यकता है।
मैंने प्रोजेक्ट की वीसी ++ निर्देशिकाओं को सभी एसटीडी और विंडोज एसडीके हेडर/libs (निर्देशिकाएं, संदर्भ निर्देशिकाएं, पुस्तकालय निर्देशिकाएं, स्रोत निर्देशिकाएं) के लिए पुराने फ़ोल्डरों में बदल दिया है।

1>Project1.obj : error LNK2019: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" ([email protected]@[email protected]) referenced in function "public: virtual void * __thiscall PluginInterface::`vector deleting destructor'(unsigned int)" ([email protected]@[email protected]) 
1>  1> 
1>StdAfx.obj : error LNK2001: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" ([email protected]@[email protected]) 
1>  1> 
1>Project1.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete(void *,unsigned int)" ([email protected]@Z) referenced in function [email protected]@@[email protected]$0 
1>  1> 
1>Project1.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete[](void *,unsigned int)" ([email protected]@Z) referenced in function "public: virtual void * __thiscall PluginInterface::`vector deleting destructor'(unsigned int)" ([email protected]@[email protected]) 

यह Deleter के इस आंतरिक कार्यान्वयन के लिए क्यों लग रही है:

VS2010 के साथ काम करते हुए ठीक काम करता था यह दांव, लेकिन VS2015 पर मैं कुछ अजीब लिंक त्रुटियों हो रही है? क्या इसे हेडर से कार्यान्वयन मिलना चाहिए? यह वीएस -2010 में क्यों काम करेगा और वीएस2015 नहीं?

मैं इसे ठीक से कैसे ठीक कर सकता हूं?

+0

क्या आपने डिफ़ॉल्ट पुस्तकालयों को अनदेखा करने के लिए लिंकर इनपुट प्रॉपर्टी सेट करने का प्रयास किया है? – Mahesh

+0

हां, और यह केवल इसे खराब बना दिया। उन प्रतीकों को दूसरों के गुच्छा के साथ लापता थे। –

+1

ये स्वत: जेनरेट किए गए सहायक कार्य हैं, रेमंड चेन [इस पुराने ब्लॉग पोस्ट] में उनके बारे में बात करते हैं (https://blogs.msdn.microsoft.com/oldnewthing/20040203-00/?p=40763)। उनका नाम बदल गया है, अब उनके नाम पर "एह" उपसर्ग कर रहा है। मुझे लगता है कि सी ++ 11 में * स्थिर * कीवर्ड के लिए मांगे गए नए व्यवहार के साथ इसका कुछ संबंध है। ऐसा कुछ भी नहीं जिसे आप बंद कर सकते हैं, बिना ईएच/संकलन करना शायद ही कोई कामकाज है, इसलिए आप बहुत खराब हैं। –

उत्तर

1

तो, तोड़ने परिवर्तन दस्तावेजों का एक बहुत पढ़ने के बाद मैं एक ध्वज है कि इन नए C++ 14 delete कार्यान्वयन here को दबाने कर सकते हैं पाया, प्लेसमेंट नई तहत और को हटा दें।

ध्वज जोड़ना /Zc:sizedDealloc- लापता ऑपरेटर हटाएं() कार्यान्वयन को हटा देता है।
प्रोजेक्ट के गुण -> विन्यास गुण -> C/C++ -> कमांड लाइन ->/Zc: sizedDealloc-

आप संकलक विकल्प /Zc का उपयोग करके पुराने व्यवहार करने के लिए वापस कर सकते हैं: sizedDealloc -। यदि आप इस विकल्प का उपयोग करते हैं, तो दो-तर्क हटाएं फ़ंक्शंस मौजूद नहीं हैं और आपके प्लेसमेंट ऑपरेटर को हटाने के साथ कोई संघर्ष नहीं करेंगे।

eh vector destructor iterator त्रुटि मैं opened a separate question, और answered it there है के लिए

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