我编写了一个覆盖delete操作符的c++静态库。在测试项目中使用库时,项目会产生以下错误:
错误LNK2005:"void __cdecl运算符删除(void *)“(??3@YAXPAX@Z)已在LIBCMTD.lib(delete_scalar.obj)中定义。
在搜索了答案之后,我相信这是由于CRT和MFC库的包含顺序造成的,但是当尝试应用解决方案时,所有的答案seam都过时了。我正在使用2017。
有人能告诉我如何正确地建造我的图书馆吗?谢谢。
编辑-我知道一个定义规则。我试图找出如何防止LIBCMTD.lib版本被包括在内。
发布于 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中,添加对项目的引用,以指定要使用的库,然后打开项目的属性页对话框,在Linker,Input属性页中,设置忽略所有默认库,或忽略特定的默认库E 212属性以禁用默认库。
我过去就不得不这样做。
https://stackoverflow.com/questions/46638252
复制相似问题