error LNK2005: _DllMain@12 already defined in MSVCRTD.lib

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

【错误信息】:函数

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

【分析缘由】:.net

    这篇文章:《在Visual C++中以错误的顺序连接CRT库和MFC库时出现LNK2005错误》详细分析和说明了产生这种错误的缘由。命令行

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

【解决方法】:get


     在“项目 -> 属性 -> 连接器 -> 命令行”栏中,输入 /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的其余用法。 编译

免费学习更多精品课程,登陆乐搏学院官网http://www.learnbo.com/

或关注咱们的官方微博微信,还有更多惊喜哦~

本文出自 “Jhuster的专栏” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/571350

相关文章
相关标签/搜索