2007年2月28日 星期三

Linker Tools Error LNK2005

vs2005pe.PNG
Link error 2005 是我遇過最難搞的...
網路上也有一大堆資料..
但真正有幫助的卻寥寥無幾..

尤其是使用 MFC、ATL最常遇到...
因為有先後順序,而導致是定義衝突的問題
不論 MSDN 或 GOOGLE 上都有說明
但實在幫助甚少...

[code]uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)[/code]

最後,只好使用 LINKER 的參數 "/FORCE:MULTIPLE"
來規避問題,雖然 AP 執行起來沒什麼問題
但卻感覺有點不求甚解,待有空再來研究了..
把這個參數加入後,會有一些警告...

[code]uafxcw.lib(afxmem.obj) : warning LNK4006: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMT.lib(delete.obj); second definition ignored[/code]

參考資料:
"LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries" (Q148652)
"Global Overloaded Delete Operator Causes LNK2005" (Q140440)
"LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT" (Q184235).