already defined in LIBCMTD.lib(new.obj) nafxcwd.lib .

来源:互联网 发布:linux延时命令 sleep 编辑:程序博客网 时间:2024/06/08 09:27

最近在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,所以要怎么设定它们的顺序呢?我找到一个解法其实挺tricky的:先把它们分别都ignore掉,再额外将它们加入。

方法:

Project -> settings 在弹出的对话框中选择link 标签页;  然后在 link 标签页的Category处的下拉菜单中选中input选项;在Link页签上的Ignore Libraries输入:nafxcwd.lib  libcmtd.lib再到同一页签的Object/library modules输入:nafxcwd.lib  libcmtd.lib。再点击OK按钮就行了,这么一来,加入它们的顺序就成了我们所强迫设定的顺序了。

0 0
原创粉丝点击