最近在VC 6.0上作业,有几个地方都遇到一个十分恼人的错误。就是出现下述的错误: Linking... nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj) Debug/DCap.exe : fatal error LNK1169: one or more multiply defined symbols found
解决思路:
这样的错误,明显就是两个被link到的library都提供了同名的函式。但直接ignore掉LIBCMTD.lib当然是不行的,因為它是C的library。之所以发生这个问题,是因為MFC的library和C的library相衝突,必须设定它们被link的顺序,也就是先nafxcwd.lib再LIBCMTD.lib。但是这二者都是default libraries,所以要怎麼设定它们的顺序呢?
解决方法:
先把它们分别都ignore掉,再额外将它们加入。也就是说:在Link页籤上的Ignore Libraries输入:nafxcwd.lib libcmtd.lib,再到同一页籤的Object/library modules输入:nafxcwd.lib libcmtd.lib。这麼一来,加入它们的顺序就成了我们所强迫设定的顺序了。