【问题标题】:Link errors between dialog application and library对话框应用程序和库之间的链接错误
【发布时间】:2012-12-21 17:03:56
【问题描述】:

我有一个对话框应用程序,过去可以完美运行。它使用 MFC。 我想将一些类移动到一个单独的库中(在同一个解决方案中),所以我在同一个解决方案中创建了一个新项目,选择了 Win32 控制台应用程序、静态库和 MFC,并将这些类移动到新项目中。库项目似乎编译得很好。

在原始项目中,我添加了对新库的引用。

我现在收到这些错误,不知道如何解决它们。如果我编辑项目属性并选择 Linker/Input/Ignore All Default Libraries,我会收到更多错误。

1>afxnmcdd.lib(wincore2.obj) : error LNK2005: "void __stdcall DDX_Control(class CDataExchange *,int,class CWnd &)" (?DDX_Control@@YGXPAVCDataExchange@@HAAVCWnd@@@Z) already defined in nafxcwd.lib(wincore2.obj)
1>afxnmcdd.lib(wincore2.obj) : error LNK2005: "public: int __thiscall CWnd::ExecuteDlgInit(void *)" (?ExecuteDlgInit@CWnd@@QAEHPAX@Z) already defined in nafxcwd.lib(wincore2.obj)
1>afxnmcdd.lib(afxctrlcontainer2.obj) : error LNK2005: "void __cdecl AfxRegisterMFCCtrlClasses(void)" (?AfxRegisterMFCCtrlClasses@@YAXXZ) already defined in nafxcwd.lib(afxctrlcontainer2.obj)
1>afxnmcdd.lib(afxctrlcontainer2.obj) : error LNK2005: "protected: void __thiscall CMFCControlContainer::PreUnsubclassControl(class CWnd *)" (?PreUnsubclassControl@CMFCControlContainer@@IAEXPAVCWnd@@@Z) already defined in nafxcwd.lib(afxctrlcontainer2.obj)
1>afxnmcdd.lib(afxctrlcontainer2.obj) : error LNK2005: "public: int __thiscall CMFCControlContainer::SubclassDlgControls(void)" (?SubclassDlgControls@CMFCControlContainer@@QAEHXZ) already defined in nafxcwd.lib(afxctrlcontainer2.obj)
1>afxnmcdd.lib(afxctrlcontainer2.obj) : error LNK2005: "public: static int __stdcall CMFCControlContainer::UTF8ToString(char const *,class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > &,int)" (?UTF8ToString@CMFCControlContainer@@SGHPBDAAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@H@Z) already defined in nafxcwd.lib(afxctrlcontainer2.obj)
1>.\Debug\application-ui.exe : fatal error LNK1169: one or more multiply defined symbols found

我该如何解决这个问题?

【问题讨论】:

  • 没听懂:您想构建一个库,并且选择控制台应用程序作为项目类型?
  • 不,因为我按照微软这里的教程,这就是它所说的:msdn.microsoft.com/en-us/library/ms235627(v=vs.80).aspx 你从那个开始,然后在下一个屏幕中选择静态库
  • 看起来您正在静态链接来自两个项目的 MFC 库。每个项目的 MFC 特定链接器设置是什么?

标签: visual-c++ mfc


【解决方案1】:

在您的静态库中,转到 STDAFX.H 并注释掉以下预处理器宏:

#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS

【讨论】:

  • 这两次帮助了我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多