昨天我刚升级到Visual 2008,从2005年开始。嗯,我正在尝试利用一些新的类(特别是CFrameWndEx),而且我也会遇到错误。声明一个CFrameWndEx子类,然后将afxcmdiframewndex.h wndex.h添加到stdafx.h只会给出一个错误。似乎是无害的。我只得到"COleDropTarget基类未定义“的错误。好的,简单的修正,将afxole.h添加到我的包含中,这一切都会很好。但在我做完这件事之后,所有的地狱都散去了。在链接之前,输出中的所有内容都是良好的:
1>LIBCMT.lib(sprintf.obj) : error LNK2005: _sprintf already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(strftime.obj) : error LNK2005: _strftime already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in msvcrtd.lib(cinitexe.obj)
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in msvcrtd.lib(cinitexe.obj)
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj)
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in msvcrtd.lib(cinitexe.obj)
1>LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in msvcrtd.lib(MSVCR90D.dll)
1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in msvcrtd.lib(MSVCR90D.dll)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __setmbcp already defined in LIBCMT.lib(mbctype.obj)
1>LINK : warning LNK4098: defaultlib 'msvcrtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library而利用/NODEFAULTLIB来摆脱msvcrtd.lib和LIBCMT只是造成了一大堆杂乱无章的问题。我认为解决这个问题的一种方法是找到与msvcrtd.lib和LIBCMT冲突的库,但是我该如何处理呢?
有人见过这个问题吗?这似乎与微软代码有冲突,但有可能是我的代码。任何帮助都将不胜感激。
提前谢谢。
发布于 2011-07-28 20:26:16
您的问题是msvcrtd.lib与LIBCMT.lib冲突。它们不应该都被使用。msvcrtd.lib库用于多线程动态链接调试运行时(/MDd),而LIBCMT用于多线程静态链接非调试运行时(/MT)。有关背景信息,请参见这里。
如果没有指定开关,LIBCMT是默认使用的。
也许值得检查一下"Configuration“(Configuration)(Configuration))(Configuration)(Configuration)、代码生成(Configuration)(代码生成)(Configuration)(代码生成)(Configuration)(Runtime)设置(Runtime)设置为/MD (用于发布版本),将其设置为/MDd (用于调试生成)。您需要检查项目和项目中每个cpp文件的设置,因为单个文件可以有不同的设置。
不过,老实说,如果开关设置是错误的,那么即使在您包含afxole.h之前,我也希望问题会出现,而且我也希望afxver.h生成一个错误,要求您使用/MD开关,所以问题可能比错误的开关设置更微妙。
更新:我取出了对/ML开关的引用,即Visual 2003而不是Visual 2005。
Update:再考虑一下这一点,如果您已经添加了afxframewndex.h,那么就不需要显式地包含afxole.h,因为它应该为您包括在内。
如果打开/showIncludes并编译程序,输出窗口应该显示如下所示.
1>Note: including file: c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxframewndex.h
[snipped all the includes due to afxframeimpl.h and afxcontrolbarutil.h]
1>Note: including file: c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxpopupmenu.h
1>Note: including file: c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxpopupmenubar.h
1>Note: including file: c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxtoolbar.h
1>Note: including file: c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxtoolbardroptarget.h
1>Note: including file: c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxole.h您需要摆脱显式#include of afxole.h,并弄清楚为什么COleDropTarget基类是未定义的,尽管包含了afxframewndex.h wndex.h。
https://stackoverflow.com/questions/6861556
复制相似问题