博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
error LNK2005: _DllMain@12 already defined in MSVCRTD.lib
阅读量:6307 次
发布时间:2019-06-22

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

    本文主要分析和解决编译链接时产生的 LNK2005 错误。

【错误信息】:

    mfcs90ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)

【分析原因】:

    这篇文章:详细分析和说明了产生这种错误的原因。

    简单地说,就是产生错误的工程同时使用了CRT库和MFC库,并且链接顺序不对,CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

【解决方法】:

     
在“项目 -> 属性 -> 链接器 -> 命令行”栏中,输入 /verbose:lib编译参数,这样,就可以在output窗口看到链接时搜索的库的先后顺序,对于本问题,你一定可以看到类似下面的先后输出:
 
 
  1. >    Searching D:\vs2008\VC\lib\MSVCRTD.lib: 
  2. >    Searching D:\vs2008\VC\atlmfc\lib\mfcs90ud.lib: 
     由此可以看出,默认情况下,先链接了CRT库MSVCRTD.lib,然后链接的是MFC的库mfcs90ud.lib,因此,需要强制改变一下它们的链接顺序。
     
选择“项目 -> 属性 -> 链接器 -> 输入”栏,在其中的“忽略特定的库”这一栏输入:MSVCRTD.lib mfcs90ud.lib, 然后,在“附加库”这一栏中输入: mfcs90ud.lib MSVCRTD.lib  问题即可解决。
 
【知识扩展】:
顺便普及一下编译参数/VERBOSE的其他用法。  该说明的官方网址点击: :
 
本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/571350,如需转载请自行联系原作者
你可能感兴趣的文章
跟我学Spring Cloud(Finchley版)-05-服务注册与服务发现-Eureka入门
查看>>
VisualStudio不让控制台程序一闪而过
查看>>
交换机配置
查看>>
python读取excel表格的数据
查看>>
折半查找
查看>>
写给创始人的期权问答及实操白皮书(连载一)
查看>>
jenkins集成sonarqube
查看>>
Sed、Awk和grep 学习笔记(一)
查看>>
row_number()over函数的使用
查看>>
viewPort(浏览器窗口的整个显示区域)
查看>>
如何用树莓派打造一个家庭影院
查看>>
部署 elk 日志系统 elasticsearch、logstash、 kibana
查看>>
ORA-6550;6510
查看>>
dump备份命令
查看>>
使用FastDFS搭建图片服务器单实例篇
查看>>
ip路由选择
查看>>
Model-View-ViewModel for iOS
查看>>
16.Centos7文件类型
查看>>
用得上的网络命令
查看>>
LAMP平台编译安装
查看>>