我是靠谱客的博主 甜蜜大船,最近开发中收集的这篇文章主要介绍error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

【错误信息】:

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

【分析原因】:

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

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

【解决方法】:


     在“项目 -> 属性 -> 链接器 -> 命令行”栏中,输入 /verbose:lib编译参数,这样,就可以在output窗口看到链接时搜索的库的先后顺序,对于本问题,你一定可以看到类似下面的先后输出:
 
>    Searching D:vs2008VClibMSVCRTD.lib: 
>    Searching D:vs2008VCatlmfclibmfcs90ud.lib: 


     由此可以看出,默认情况下,先链接了CRT库MSVCRTD.lib,然后链接的是MFC的库mfcs90ud.lib,因此,需要强制改变一下它们的链接顺序。
     选择“项目 -> 属性 -> 链接器 -> 输入”栏,在其中的“忽略特定的库”这一栏输入:MSVCRTD.lib mfcs90ud.lib, 然后,在“附加库”这一栏中输入: mfcs90ud.lib MSVCRTD.lib  问题即可解决。

来源:http://ticktick.blog.51cto.com/823160/571350

http://wanglimin2004.blog.163.com/blog/static/1154884982012393174875/


最后

以上就是甜蜜大船为你收集整理的error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义的全部内容,希望文章能够帮你解决error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部