(轉+原)VC編譯錯誤:uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已經在 LIBCMT.lib(new.obj) 中定義


參考網址: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

之后,程序編譯通過,運行也沒有出現問題。

哎,犯二了...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM