LNK2005: _DllMain@12 already defined in LIBCMTD.lib(dllmain.obj)
发布日期:2025-04-11 01:24:18 浏览次数:8 分类:精选文章

本文共 775 字,大约阅读时间需要 2 分钟。

在使用Visual Studio 2003创建MFC DLL项目时,出现了一系列错误和警告,主要集中在DllMain函数和操作符new/delete的重复定义上。以下是逐步解决方案:

  • 恢复预编译头设置

    • 打开项目属性,转到“VC++项目” > “预编译头文件”。
    • 确保“使用预编译头文件”选项勾选,同时设置“预编译输出路径”和“使用共享预编译头文件”(或根据需要选择)。
    • 保存属性设置,重新编译项目,这将生成新的预编译头文件。
  • 确保包含必要的头文件

    • 在所有涉及的cpp文件中,添加#include "stdafx.h",确保包含标准头文件。
    • 检查是否有其他必要的头文件(如
      ,
      等)也需要包含,以避免定义缺失。
  • 检查DllMain函数的定义

    • 确保只在一个cpp文件中定义了DllMain函数,避免在多个位置重复定义。
    • 检查是否有源文件中包含多次DllMain的定义,或者是否有第三方库也包含了它,导致重复。
  • 修复操作符的重复定义

    • 确保没有手动定义操作符new或delete,因为这些通常由标准库定义。
    • 如果在项目中包含了自定义的new/delete操作符,可能需要重新设计代码,或者确保它们不与标准定义冲突。
  • 检查项目中的重复包含

    • 查看项目中的所有头文件包含情况,确保没有重复包含相同的文件。
    • 检查是否有其他库文件(如第三方库)包含了冲突的定义,需要调整链接选项或代码。
  • 清理旧的对象文件

    • 在项目的“清理”选项中,手动清理生成的对象文件和临时文件,然后重新编译。
    • 确保没有残留的旧编译结果导致符号冲突。
  • 重新测试和调试

    • 编译项目,检查是否仍然有错误或警告。
    • 如果仍然存在问题,可以尝试逐步排除问题,例如先解决DllMain的定义问题,再处理操作符的冲突。
  • 通过以上步骤,应能逐步解决DLL生成中的符号冲突问题,确保项目能够顺利编译和运行。

    上一篇:LNK2019 无法解析的外部符号 __imp_CommandLineToArgvW,该符号在函数 WinMain 中被引用
    下一篇:LNK 2005 error 函数定义也是定义!!

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年05月07日 18时43分55秒