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

Posted stephen-qin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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按钮就行了,这么一来,加入它们的顺序就成了我们所强迫设定的顺序了。

以上是关于operator new[]() already defined in libcpmt.lib报错问题处理的主要内容,如果未能解决你的问题,请参考以下文章

Cannot create a new pixel buffer adaptor with an asset writer input that has already started writing

C++内存管理(new operator/operator new/operator delete/placement new)

c++ new operator和operator new,delete operator和operator delete

错误记录Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )

C++内存管理机制学习笔记:重载operate new/::operator new..../new()

C++内存管理机制学习笔记:重载operate new/::operator new..../new()