2012-11-27 14 views
5

को स्थिर रूप से लिंक करते समय विजुअल स्टूडियो 2012 में सबसे सरल प्रकार का नया एमएफसी एप्लिकेशन बनाते समय, और इसे एमएफसी को स्थिर रूप से लिंक करने के लिए सेट करते समय लिंकिंग विफल हो जाती है।अनमोडिफाइड विजुअल स्टूडियो 2012 एमएफसी टेम्पलेट में लिंक त्रुटियां जब एमएफसी

यहां एक gallery of 7 screenshots विज़ार्ड के माध्यम से प्रोजेक्ट के निर्माण से शुरू हो रहा है, इमारत तक (जिसके परिणामस्वरूप लिंकर त्रुटि है)। बीच में कोई स्रोत संपादन नहीं किया गया था।

त्रुटि लॉग राज्य:

1>------ Build started: Project: Test, Configuration: Debug Win32 ------ 
1> stdafx.cpp 
1> TestDlg.cpp 
1> Test.cpp 
1> Generating Code... 
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "void __cdecl AfxRegisterMFCCtrlClasses(void)" ([email protected]@YAXXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj) 
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "protected: void __thiscall CMFCControlContainer::PreUnsubclassControl(class CWnd *)" (?PreUnsubclassControl[email protected]@@[email protected]@@Z) already defined in afxnmcdd.lib(afxctrlcontainer2.obj) 
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "public: int __thiscall CMFCControlContainer::SubclassDlgControls(void)" ([email protected]@@QAEHXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj) 
1>C:\Users\XXXXXXXX\Documents\Visual Studio 2012\Projects\Test\Debug\Test.exe : fatal error LNK1169: one or more multiply defined symbols found 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

इस बस मुझे है? क्या आपको इस बारे में कोई सुझाव मिलेगा कि इसे कैसे हल किया जाए?

+2

अगर मुझे अनुमान लगाना पड़ा तो मैं कहूंगा कि जादूगर टूटा हुआ है। यदि आप स्थैतिक एमएफसी और सीआरटी से जुड़ रहे हैं [afx.h से ऑटो-जादू सेटअप] (http://msdn.microsoft.com/en-us/library/bx5yfk7t.aspx) आपके लिए इसका ख्याल रखना चाहिए । मान लें कि आप यूनिकोड समर्थन के साथ संकलित कर रहे हैं (ऐसा प्रतीत होता है कि आप हैं, वैसे भी; इन दिनों कौन नहीं है?) स्थिर lib-static-unicode-debug के लिए उचित lib 'uafxcwd.lib' प्रतीत होता है। या तो दूसरी मुक्ति बिल्कुल नहीं होनी चाहिए, या लिंकर ऑर्डर गलत है। मुझे यह जानकर उत्सुकता होगी कि क्या होता है यदि आप * पीआईसी फाइलों को उड़ाने के बाद * यूनिकोड सपोर्टपोर्ट और पुनर्निर्माण बंद कर देते हैं। – WhozCraig

+1

मुझे लगता है कि आपको माइक्रोसॉफ्ट को एक बग के रूप में इसकी रिपोर्ट करनी चाहिए। मुझे लगता है कि आप वीएस 2012 में हेल्प मेन्यू से ऐसा कर सकते हैं। फिर अपने लाइब्रेरी विकल्पों से 'afxnmcdd.lib' जैसे फर्जी लगने वाले सभी पुस्तकालयों को हटा दें, और बस' uafxcwd.lib' वापस जोड़ें। शायद '/ NODEFAULTLIBS' –

+0

@ वॉरेन-पी मैं सहमत हूं। मैं निश्चित रूप से ऐसा कर रहा हूं, दूसरों को इस मुद्दे का पता लगाने के सिरदर्द को बचाने के लिए। उम्मीद है कि (?) यह एक वास्तविक बग है और मेरे सेट-अप के लिए विशिष्ट कुछ नहीं है। – Paul

उत्तर

0

परीक्षण के बाद, v100 अच्छी तरह से काम करता है और v110 काम नहीं करता है। इस लिंक के रूप में एमएस कनेक्ट करने की रिपोर्ट करने का प्रयास करें: http://connect.microsoft.com/VisualStudio/feedback/details/581084/linker-cant-locate-some-external-symbol-when-use-mfc-in-a-static-library

4

मुझे वही समस्या मिली जब मैं अपने प्रोजेक्ट को एक साथ स्थिर लिंक करने का प्रयास करता हूं।

जैसा कि माइकल बोर ने सुझाव दिया था, यह stdafx.h में #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS की पंक्ति पर टिप्पणी करने के बाद ठीक लगता है।

2

मैं एक ही मुद्दे पर आया हूं। यदि आप #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS का निर्णय लेते हैं और बहुत सारे एमएफसी ओवरहेड से छुटकारा पा लेते हैं तो आपको यह भी सुनिश्चित करना चाहिए कि आप डायलॉग बेस क्लासेस, विधि कॉल इत्यादि CDialogEx से CDialog पर बदल दें।

यदि आप पृष्ठभूमि रंग या अपने संवाद की छवि को नहीं बदलते हैं, तो आप पाएंगे कि CDialogEx वैसे भी बेकार है।

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