在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 ==========
这只是我吗?您对如何解决这个问题有什么建议吗?
答案 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)
经过测试,v100运行良好,v110不起作用。尝试向MS连接报告此链接:http://connect.microsoft.com/VisualStudio/feedback/details/581084/linker-cant-locate-some-external-symbol-when-use-mfc-in-a-static-library