首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误LNK2005:"void __cdecl运算符删除(void *)“(??3@YAXPAX@Z)已在LIBCMTD.lib(delete_scalar.obj)中定义。

错误LNK2005:"void __cdecl运算符删除(void *)“(??3@YAXPAX@Z)已在LIBCMTD.lib(delete_scalar.obj)中定义。
EN

Stack Overflow用户
提问于 2017-10-09 03:02:05
回答 1查看 2.9K关注 0票数 5

我编写了一个覆盖delete操作符的c++静态库。在测试项目中使用库时,项目会产生以下错误:

错误LNK2005:"void __cdecl运算符删除(void *)“(??3@YAXPAX@Z)已在LIBCMTD.lib(delete_scalar.obj)中定义。

在搜索了答案之后,我相信这是由于CRT和MFC库的包含顺序造成的,但是当尝试应用解决方案时,所有的答案seam都过时了。我正在使用2017。

有人能告诉我如何正确地建造我的图书馆吗?谢谢。

编辑-我知道一个定义规则。我试图找出如何防止LIBCMTD.lib版本被包括在内。

EN

回答 1

Stack Overflow用户

发布于 2017-10-09 14:51:18

看看这里:

https://learn.microsoft.com/en-gb/cpp/error-messages/tool-errors/linker-tools-error-lnk2005

正如您将在本文中看到的那样,有几个原因。例如:

如果链接标准库或CRT的多个版本,则可能发生此错误。例如,如果尝试将零售和调试CRT库,或库的静态和动态版本,或标准库的两个不同版本链接到可执行文件,则可能会多次报告此错误。若要解决此问题,请从链接命令中移除每个库的所有副本(除一个副本外)。我们不建议您在同一个可执行文件中混合零售库和调试库,或者库的不同版本。 若要告诉链接器使用缺省值以外的库,请在命令行上指定要使用的库,并使用/NODEFAULTLIB选项禁用默认库。在IDE中,添加对项目的引用,以指定要使用的库,然后打开项目的属性页对话框,在LinkerInput属性页中,设置忽略所有默认库,或忽略特定的默认库E 212属性以禁用默认库。

我过去就不得不这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46638252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档