前两个错误: nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int,int,char const *,int)" (??2@YAPAXIHPBDH@Z) already defined in LIBCD.lib(dbgnew.obj) 原因 CRT 库对new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接CRT 库。 解决方案 解决该问题有两种方法:第一种解决方案涉及到强制链接程序按照正确的顺序链接库。第二种解决方案是让您查找导致问题的模块并纠正它。 一、强制链接程序按照正确的顺序链接库 1、在“工程”菜单中单击“设置”项。 2、在弹出的“工程设置”对话框中,点击“link”选项卡。 3、在“分类”下拉框中选中“Input”选项。 4、在“对象/库模块”框中,插入库名。必须确保这些库按顺序列出,且作为命令行中的前两个库(例如,Nafxcwd.lib Libcmtd.lib)列出。 要在 Visual C++ .NET 中设置该选项,请阅读"设置 Visual C++ 项目属性"联机帮助主题。 二、找到并纠正出现问题的模块 1、同上 2、同上 3、在“Project Option“框中键入 /verbose:lib。 4、重新生成项目。在链接过程中,这些库将在输出窗口中列出 。 更多信息 使用MFC 库时,务必先链接它们,然后再链接CRT 库。这可以通过确保项目中的每个文件都首先包含 Msdev\Mfc\Include\Afx.h 来完成。直接包含 (#include ) 或间接包含 (#include ) 都可以。Afx.h 包含文件会通过使用 #pragma comment (lib,"") 指令来强制采用库的正确顺序。 如果源文件的扩展名为 .c,或者该文件的扩展名为 .cpp 但不使用 MFC,则可以创建一个较小的头文件 (Forcelib.h) 并将其放在模块的顶端。这个新头文件可确保按照正确的顺序搜索库。 Visual C++ 不包含该头文件。要创建此文件,请按照下列步骤操作: 1. 打开 Msdev\Mfc\Include\Afx.h。 2. 选定 #ifndef _AFX_NOFORCE_LIBS 和 #endif //!_AFX_NOFORCE_LIBS 之间的行。 3. 将选定部分复制到 Windows 剪贴板。 4. 创建一个新文本文件。 5. 将剪贴板的内容粘贴到这个新文件中。 6. 将该文件另存为 Msdev\Mfc\Include\Forcelib.h。 后两个错误: nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex 原因1: 可能没有加头文件<process.h> 原因2: 参数没有设置好 [Project] --> [Settings] --> 选择"C/C++"属性页, 在Category中选择Code Generation, 再在Use run-time library中选择Debug Multithreaded或者multithreaded |
|