前兩個(gè)錯(cuò)誤: 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 庫對(duì)new、delete 和 DllMain 函數(shù)使用弱外部鏈接。MFC 庫也包含new、delete 和 DllMain 函數(shù)。這些函數(shù)要求先鏈接 MFC 庫,然后再鏈接CRT 庫。 解決方案 解決該問題有兩種方法:第一種解決方案涉及到強(qiáng)制鏈接程序按照正確的順序鏈接庫。第二種解決方案是讓您查找導(dǎo)致問題的模塊并糾正它。 一、強(qiáng)制鏈接程序按照正確的順序鏈接庫 1、在“工程”菜單中單擊“設(shè)置”項(xiàng)。 2、在彈出的“工程設(shè)置”對(duì)話框中,點(diǎn)擊“link”選項(xiàng)卡。 3、在“分類”下拉框中選中“Input”選項(xiàng)。 4、在“對(duì)象/庫模塊”框中,插入庫名。必須確保這些庫按順序列出,且作為命令行中的前兩個(gè)庫(例如,Nafxcwd.lib Libcmtd.lib)列出。 要在 Visual C++ .NET 中設(shè)置該選項(xiàng),請(qǐng)閱讀"設(shè)置 Visual C++ 項(xiàng)目屬性"聯(lián)機(jī)幫助主題。 二、找到并糾正出現(xiàn)問題的模塊 1、同上 2、同上 3、在“Project Option“框中鍵入 /verbose:lib。 4、重新生成項(xiàng)目。在鏈接過程中,這些庫將在輸出窗口中列出 。 更多信息 使用MFC 庫時(shí),務(wù)必先鏈接它們,然后再鏈接CRT 庫。這可以通過確保項(xiàng)目中的每個(gè)文件都首先包含 Msdev\Mfc\Include\Afx.h 來完成。直接包含 (#include ) 或間接包含 (#include ) 都可以。Afx.h 包含文件會(huì)通過使用 #pragma comment (lib,"") 指令來強(qiáng)制采用庫的正確順序。 如果源文件的擴(kuò)展名為 .c,或者該文件的擴(kuò)展名為 .cpp 但不使用 MFC,則可以創(chuàng)建一個(gè)較小的頭文件 (Forcelib.h) 并將其放在模塊的頂端。這個(gè)新頭文件可確保按照正確的順序搜索庫。 Visual C++ 不包含該頭文件。要?jiǎng)?chuàng)建此文件,請(qǐng)按照下列步驟操作: 1. 打開 Msdev\Mfc\Include\Afx.h。 2. 選定 #ifndef _AFX_NOFORCE_LIBS 和 #endif //!_AFX_NOFORCE_LIBS 之間的行。 3. 將選定部分復(fù)制到 Windows 剪貼板。 4. 創(chuàng)建一個(gè)新文本文件。 5. 將剪貼板的內(nèi)容粘貼到這個(gè)新文件中。 6. 將該文件另存為 Msdev\Mfc\Include\Forcelib.h。 后兩個(gè)錯(cuò)誤: nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex 原因1: 可能沒有加頭文件<process.h> 原因2: 參數(shù)沒有設(shè)置好 [Project] --> [Settings] --> 選擇"C/C++"屬性頁, 在Category中選擇Code Generation, 再在Use run-time library中選擇Debug Multithreaded或者multithreaded |
|