operator new[]() already defined in libcpmt.lib报错问题处理

Error:

Linking... nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)

这样的错误,明显就是两个被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按钮就行了,这么一来,加入它们的顺序就成了我们所强迫设定的顺序了。

posted @ 2020-01-13 22:35  心媛意码  阅读(314)  评论(0编辑  收藏  举报