在测试GUIToolKit的Gui_DevStudio项目测试时,把"在共享 DLL 中使用 MFC"改成"在静态库中使用 MFC"时,出现下列错误:
---------------------------------------------------------------------------------------Gui_DevStudio error LNK2005: "int __stdcall _AfxGetDropDownWidth(void)" (?_AfxGetDropDownWidth@@YGHXZ) 已经在 nafxcwd.lib(bartool.obj) 中定义
Gui_DevStudio error LNK2005: "int _afxDropDownWidth" (?_afxDropDownWidth@@3HA) 已经在 nafxcwd.lib(bartool.obj) 中定义
Gui_DevStudio error LNK2005: "void __stdcall _AfxAdjustRectangle(class CRect &,class CPoint)" (?_AfxAdjustRectangle@@YGXAAVCRect@@VCPoint@@@Z) 已经在 nafxcwd.lib(dockcont.obj) 中定义
Gui_DevStudio error LNK2019: 无法解析的外部符号 "public: __thiscall CVisualStylesXP::~CVisualStylesXP(void)" (??1CVisualStylesXP@@QAE@XZ) ,该符号在函数 "public: static int __cdecl GuiDrawLayer::IsThemeXP(void)" (?IsThemeXP@GuiDrawLayer@@SAHXZ) 中被引用
Gui_DevStudio error LNK2019: 无法解析的外部符号 "public: __thiscall CVisualStylesXP::CVisualStylesXP(void)" (??0CVisualStylesXP@@QAE@XZ) ,该符号在函数 "public: static int __cdecl GuiDrawLayer::IsThemeXP(void)" (?IsThemeXP@GuiDrawLayer@@SAHXZ) 中被引用
Gui_DevStudio error LNK2019: 无法解析的外部符号 "public: int __thiscall CVisualStylesXP::IsAppThemed(void)" (?IsAppThemed@CVisualStylesXP@@QAEHXZ) ,该符号在函数 "public: static int __cdecl GuiDrawLayer::IsThemeXP(void)" (?IsThemeXP@GuiDrawLayer@@SAHXZ) 中被引用
Gui_DevStudio fatal error LNK1120: 3 个无法解析的外部命令
---------------------------------------------------------------------------------------我在微软的MSDN中查到信息的可能的原因 不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。
该符号为封装函数(通过用 /Gy 编译创建),包含在多个文件中,但在各编译间已改变。重新编译所有包含 symbol 的文件。
以不同的形式在不同库中的两个成员对象中定义了该符号,并且使用了这两个成员对象。
某个绝对符号被定义两次,而每次定义的值不同。
头文件声明并定义了变量。可能的解决方案有:
在 .h 中声明变量:extern BOOL MyBool;,然后在 .c 或 .cpp 文件中向它分配:BOOL MyBool = FALSE;。
将变量声明为 Static。
将变量声明为 selectany。
当将 uuid.lib 与定义 GUID 的其他 .lib 文件(例如 oledb.lib 和 adsiid.lib)一起使用时。例如:
oledb.lib(oledb_i.obj) : error LNK2005: _IID_ITransactionObject
already defined in uuid.lib(go7.obj)
若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。 有关更多信息,请参阅知识库文章: Q148652,PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries。
Q140440,FIX: Global Overloaded Delete Operator Causes LNK2005。
Q184235,PRB: LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT。
该错误之后为致命错误 LNK1169。
----------------------------------------------------------------------------------
请高手帮忙看看到底是哪个原因,怎么解决,多谢先!
---------------------------------------------------------------------------------------Gui_DevStudio error LNK2005: "int __stdcall _AfxGetDropDownWidth(void)" (?_AfxGetDropDownWidth@@YGHXZ) 已经在 nafxcwd.lib(bartool.obj) 中定义
Gui_DevStudio error LNK2005: "int _afxDropDownWidth" (?_afxDropDownWidth@@3HA) 已经在 nafxcwd.lib(bartool.obj) 中定义
Gui_DevStudio error LNK2005: "void __stdcall _AfxAdjustRectangle(class CRect &,class CPoint)" (?_AfxAdjustRectangle@@YGXAAVCRect@@VCPoint@@@Z) 已经在 nafxcwd.lib(dockcont.obj) 中定义
Gui_DevStudio error LNK2019: 无法解析的外部符号 "public: __thiscall CVisualStylesXP::~CVisualStylesXP(void)" (??1CVisualStylesXP@@QAE@XZ) ,该符号在函数 "public: static int __cdecl GuiDrawLayer::IsThemeXP(void)" (?IsThemeXP@GuiDrawLayer@@SAHXZ) 中被引用
Gui_DevStudio error LNK2019: 无法解析的外部符号 "public: __thiscall CVisualStylesXP::CVisualStylesXP(void)" (??0CVisualStylesXP@@QAE@XZ) ,该符号在函数 "public: static int __cdecl GuiDrawLayer::IsThemeXP(void)" (?IsThemeXP@GuiDrawLayer@@SAHXZ) 中被引用
Gui_DevStudio error LNK2019: 无法解析的外部符号 "public: int __thiscall CVisualStylesXP::IsAppThemed(void)" (?IsAppThemed@CVisualStylesXP@@QAEHXZ) ,该符号在函数 "public: static int __cdecl GuiDrawLayer::IsThemeXP(void)" (?IsThemeXP@GuiDrawLayer@@SAHXZ) 中被引用
Gui_DevStudio fatal error LNK1120: 3 个无法解析的外部命令
---------------------------------------------------------------------------------------我在微软的MSDN中查到信息的可能的原因 不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。
该符号为封装函数(通过用 /Gy 编译创建),包含在多个文件中,但在各编译间已改变。重新编译所有包含 symbol 的文件。
以不同的形式在不同库中的两个成员对象中定义了该符号,并且使用了这两个成员对象。
某个绝对符号被定义两次,而每次定义的值不同。
头文件声明并定义了变量。可能的解决方案有:
在 .h 中声明变量:extern BOOL MyBool;,然后在 .c 或 .cpp 文件中向它分配:BOOL MyBool = FALSE;。
将变量声明为 Static。
将变量声明为 selectany。
当将 uuid.lib 与定义 GUID 的其他 .lib 文件(例如 oledb.lib 和 adsiid.lib)一起使用时。例如:
oledb.lib(oledb_i.obj) : error LNK2005: _IID_ITransactionObject
already defined in uuid.lib(go7.obj)
若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。 有关更多信息,请参阅知识库文章: Q148652,PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries。
Q140440,FIX: Global Overloaded Delete Operator Causes LNK2005。
Q184235,PRB: LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT。
该错误之后为致命错误 LNK1169。
----------------------------------------------------------------------------------
请高手帮忙看看到底是哪个原因,怎么解决,多谢先!
上面的贴子我已经看过了,我能试的办法都试了但因为我实在太菜,没搞明白这个问题如何搞掂,还请高手不吝赐教
链接的.lib和主程序同时设为"在静态库中使用MFC",但就是不行,所有才没辙了:(
试下载了一个,用2003编译了一下,把漏了的几个文件添加到了项目中后以及改了两处import的路径,就可以通过了执行了。
没有发现你的问题