静态链接MFC时未修改的Visual Studio 2012 MFC模板中的链接错误

时间:2012-11-27 17:16:49

标签: c++ visual-c++ mfc visual-studio-2012 linker-errors

在Visual Studio 2012中创建最简单类型的新MFC应用程序,并将其设置为静态链接到MFC时,链接失败。

这是一个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)" (?AfxRegisterMFCCtrlClasses@@YAXXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "protected: void __thiscall CMFCControlContainer::PreUnsubclassControl(class CWnd *)" (?PreUnsubclassControl@CMFCControlContainer@@IAEXPAVCWnd@@@Z) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "public: int __thiscall CMFCControlContainer::SubclassDlgControls(void)" (?SubclassDlgControls@CMFCControlContainer@@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 ==========

这只是我吗?您对如何解决这个问题有什么建议吗?

3 个答案:

答案 0 :(得分:4)

当我尝试将项目静态链接时,我遇到了同样的问题。

正如Michael Burr建议的那样,在stdafx.h中注释#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS这一行之后似乎很好。

答案 1 :(得分:2)

我遇到过同样的问题。如果您决定#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS并消除大量MFC开销,您还应确保将对话框基类,方法调用等从CDialogEx更改为CDialog

如果你不改变背景颜色或对话框的图像,你会发现CDialogEx无论如何都是无用的。

答案 2 :(得分:0)