MALOUDA-PSA 2025-10-11 16:04 采纳率: 85.6%
浏览 6

vc项目DEBUG编译报错

报错:

1>正在链接...
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 libcpmtd.lib(newaop.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义
1>   正在创建库 .\Debug/MyPlugin.lib 和对象 .\Debug/MyPlugin.exp
1>C:\zd_zsone\plugin\klineTdx.dll : fatal error LNK1169: 找到一个或多个多重定义的符号

项目配置没问题,如果新建一个项目,把源代码复制过去,都配置为 MTd, 动态库(.dll), 使用标准 Windows 库
有时候却可以编译成功

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-10-11 16:04
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    根据你的问题描述,编译报错是由于多定义了 operator new 函数导致的。这个问题通常出现在使用了 MFC 库(Microsoft Foundation Class)时。

    解决方法

    1. 检查你的项目中是否有多个文件包含了 afxmem.h 头文件。这个头文件中定义了 operator new 函数。
    2. 如果有多个文件包含了 afxmem.h 头文件,请检查这些文件中是否有重复定义的 operator new 函数。
    3. 如果没有重复定义的 operator new 函数,请检查你的项目中是否有其他文件包含了重复定义的 operator new 函数。
    4. 如果确定了重复定义的文件,请删除或注释掉这些文件中的 operator new 函数定义。

    核心代码

    // 删除或注释掉重复定义的 operator new 函数
    // void* operator new(unsigned int size) {
    //     // ...
    // }
    

    注意

    如果你使用了 MFC 库,请确保你的项目中只有一个文件包含了 afxmem.h 头文件。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月11日