error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
2017-11-14 10:51
567 查看
本文主要分析和解决编译链接时产生的 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窗口看到链接时搜索的库的先后顺序,对于本问题,你一定可以看到类似下面的先后输出:
由此可以看出,默认情况下,先链接了CRT库MSVCRTD.lib,然后链接的是MFC的库mfcs90ud.lib,因此,需要强制改变一下它们的链接顺序。
选择“项目 -> 属性 -> 链接器 -> 输入”栏,在其中的“忽略特定的库”这一栏输入:MSVCRTD.lib mfcs90ud.lib, 然后,在“附加库”这一栏中输入: mfcs90ud.lib MSVCRTD.lib 问题即可解决。
对于这类问题,错误信息 mfcs90ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
有两个关键点,谁报错(mfcs90ud.lib),与谁冲突(MSVCRTD.lib),根据这两个库来寻找问题根源
【错误信息】:
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窗口看到链接时搜索的库的先后顺序,对于本问题,你一定可以看到类似下面的先后输出:
> Searching D:\vs2008\VC\lib\MSVCRTD.lib: > Searching D:\vs2008\VC\atlmfc\lib\mfcs90ud.lib:
由此可以看出,默认情况下,先链接了CRT库MSVCRTD.lib,然后链接的是MFC的库mfcs90ud.lib,因此,需要强制改变一下它们的链接顺序。
选择“项目 -> 属性 -> 链接器 -> 输入”栏,在其中的“忽略特定的库”这一栏输入:MSVCRTD.lib mfcs90ud.lib, 然后,在“附加库”这一栏中输入: mfcs90ud.lib MSVCRTD.lib 问题即可解决。
对于这类问题,错误信息 mfcs90ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
有两个关键点,谁报错(mfcs90ud.lib),与谁冲突(MSVCRTD.lib),根据这两个库来寻找问题根源
相关文章推荐
- VC: error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
- mfcs100ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
- error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
- VC: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在dllmain.obj 中定义
- VC++编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- error LNK2005: _DllMain@12 已经在 LIBCMTD.lib(dllmain.obj) 中定义
- VC编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- 遇到此类问题:error LNK2005: _DllMain@12 已经在 MSVCRT.lib(dllmain.obj) 中定义
- VC编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- mfcs100d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
- LIBCMT.lib(vswprnc.obj) : error LNK2005: 已经在 msvcrtd.lib(MSVCR100D.dll) 中定义
- mfcs100d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
- MSVCRTD.lib(MSVCR71D.dll):errorLNK2005:_wcsrchr已经在LIBCD.lib(dbgrpt.obj)中定义
- msvcrtd.lib(MSVCR110D.dll) : error LNK2005: _free 已经在 libcmtd.lib(dbgfree.obj) 中定义
- uafxcwd.lib(dllmodul.obj) : error LNK2005: DllMain 已经在 中定义
- 2>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgcalloc.obj) 中定义
- MSVCRTD.lib(MSVCR71D.dll) : error LNK2005: __CrtDbgReport 已经在 LIBCD.lib(dbgrpt.obj) 中定义
- uafxcwd.lib(dllmodul.obj) : error LNK2005: DllMain 已经在 中定义
- 使用Tinyxml.lib链接出错问题解决 (LIBCMT.lib(sprintf.obj) : error LNK2005: _sprintf_s 已经在 msvcrtd.lib(MSVCR80D.dll) 中定义)
- 2>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgcalloc.obj) 中定义