2012-11-27 21 views
5

Podczas tworzenia nowej aplikacji MFC najprostszej w programie Visual Studio 2012 i ustawiania jej statycznego łączenia z MFC, łączenie kończy się niepowodzeniem.Błędy łącza w niezmodyfikowanym szablonie MFC programu Visual Studio 2012 podczas statycznego łączenia MFC

Oto gallery of 7 screenshots począwszy od utworzenia projektu przez kreatora, aż do budynku (w wyniku błędu linkera). Nie dokonano żadnej edycji źródła między.

Stan dzienniki błędów:

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 *)" ([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 ========== 

Czy to tylko ja? Czy masz sugestię, jak rozwiązać ten problem?

+2

Gdybym musiał zaryzykować przypuszczenie, powiedziałbym, że czarodziej jest zepsuty. Jeśli łączysz się ze statycznymi MFC i CRT, to [auto-magic setup z afx.h] (http://msdn.microsoft.com/en-us/library/bx5yfk7t.aspx) powinien zająć się tym dla ciebie . Zakładając, że kompilujesz się przy pomocy Unicode (wydaje się, że tak czy owak, a kto nie ma tych dni?), Poprawną biblioteką wydaje się być 'uafxcwd.lib' dla statycznego-unicode-debugowania. Albo druga lib nie powinna w ogóle istnieć, albo kolejność linkerów jest zła. Byłbym ciekawy, co się stanie, jeśli wyłączysz * wyłączenie * Suppport i Unicode Unicode - wszystko po zdmuchnięciu plików PCH. – WhozCraig

+1

Myślę, że powinieneś zgłosić to firmie Microsoft jako błąd. Myślę, że możesz to zrobić bezpośrednio z menu Pomoc w VS 2012. Następnie usuń wszystkie biblioteki, które wydają się fałszywe jak 'afxnmcdd.lib' z twoich opcji linkera, i po prostu dodaj ponownie' uafxcwd.lib'. Może dodać '/ NODEFAULTLIBS' –

+0

@ warren-p Zgadzam się. Zdecydowanie to zrobię, aby uratować innym ból głowy śledzenia tego problemu. Mam nadzieję, że (?) To prawdziwy błąd, a nie coś konkretnego dla mojej konfiguracji. – Paul

Odpowiedz

4

Mam ten sam problem, gdy próbuję połączyć statycznie mój projekt razem.

Zgodnie z sugestią Michaela Burra wygląda na to, że po wypowiedzeniu linii #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS w pliku stdafx.h wygląda dobrze.

2

Natknąłem się na ten sam problem. Jeśli zdecydujesz się na #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS i pozbędziesz się dużo nakładu MFC, powinieneś także upewnić się, że zmieniłeś klasy bazowe okna dialogowego, wywołania metod itp. Z CDialogEx na CDialog.

Jeśli nie zmienisz koloru tła lub obrazu w oknie dialogowym, okaże się, że CDialogEx jest w zasadzie bezużyteczny.