參考網址:http://zhanyonhu.blog.163.com/blog/static/16186044201023094754832/
1>uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已經在 LIBCMT.lib(new.obj) 中定義
1>uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已經在 LIBCMT.lib(delete.obj) 中定義
1>uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已經在 LIBCMT.lib(new2.obj) 中定義
1>../bin\TLLogger_Unicode_Release.exe : fatal error LNK1169: 找到一個或多個多重定義的符號
解決方法:
http://blog.vckbase.com/zaboli/archive/2010/02/05/40921.aspx(這個已經打不開了)
原因:
CRT 庫對 new、delete 和 DllMain 函數使用弱外部鏈接。MFC 庫也包含 new、delete 和 DllMain 函數。這些函數要求先鏈接 MFC 庫,然后再鏈接 CRT 庫。
當 C 運行時 (CRT) 庫和 Microsoft 基礎類 (MFC) 庫的鏈接順序有誤時,可能會出現以下 LNK2005 錯誤。
解決方法:
強制鏈接器按照正確的順序鏈接庫!
project->properties->Linker->Ignore Specific Library(忽略特定默認庫) 添加 uafxcwd.lib Libcmtd.lib
在Additional Dependencied(附加依賴項)添加uafxcwd.lib Libcmtd.lib
自己添加的:上面是在debug的情況下,使用這些庫。在release時,開始加了這些庫,然后發現程序依舊編譯不過去,提示
:IsDirectory(void)const " (?IsDirectory@CFileFind@@QBEHXZ) 已經在 uafxcwd.lib(afxinl1.obj) 中定義
找了一段時間,也試着按照debug的條件重新配置release,結果依舊有上面的錯誤。最后突然想到,后綴前面的最后一個d代表debug,release時沒有這個d。因而在忽略特定默認庫中添加
uafxcw.lib Libcmt.lib
在附加依賴項中添加
uafxcw.lib Libcmt.lib
之后,程序編譯通過,運行也沒有出現問題。
哎,犯二了...