博客
关于我
LNK2005: _DllMain@12 already defined in LIBCMTD.lib(dllmain.obj)
阅读量:793 次
发布时间:2023-02-06

本文共 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生成中的符号冲突问题,确保项目能够顺利编译和运行。

    转载地址:http://jyufk.baihongyu.com/

    你可能感兴趣的文章
    list set map的区别
    查看>>
    List 去重的 6 种方法,这个方法最完美
    查看>>
    List 去重的 6 种方法,这个方法最完美!
    查看>>
    List 集合去重的 3 种方法
    查看>>
    List,Set,Map三者的区别(不同点)
    查看>>
    list.pop 的 numpy 等效项?
    查看>>
    list.remove()时报java.lang.UnsupportedOperationException异常错误的处理
    查看>>
    list.size()和list.isEmpty()的区别和效率以及CollectionUtils.isEmpty()的使用
    查看>>
    List<Map>遍历修改map值
    查看>>
    List<T> to DataTable
    查看>>
    ListBox 循环删除当前项
    查看>>
    listbox相互传值
    查看>>
    Listener监听器
    查看>>
    ListUtil常用操作
    查看>>
    Listview 利用Datapager进行分页
    查看>>
    ListView 的图片下载,优化造成的跳变
    查看>>
    Listview加载不同布局
    查看>>
    listview数据刷新后自动滑到底部
    查看>>
    List中new ArrayList和null有什么区别
    查看>>
    list之按照中文拼音首字母排序
    查看>>