解决 Visual C++2013 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
2017-03-15 10:22
429 查看
本文来自MSDN https://support.microsoft.com/zh-cn/help/148652/a-lnk2005-error-occurs-when-the-crt-library-and-mfc-libraries-are-linked-in-the-wrong-order-in-visual-c
在使用VC2013编译工程时,由于使用了第三方库,且该库的cpp文件被调整为Not Using Precompiled Headers.也就是不使用stdafx.h的预编译选项.
导致出现连接冲突.
1>------ Build started: Project: XXXXXX, Configuration: Debug Win32 ------
1>mfcs120d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
1>.\Debug\XXXXXX.dll : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
以下是第三方库中cpp(cc)文件的编译选项
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/94ca71214f25ce55ef4a9995230ce82f)
根据以上MSDN文档的描述
CRT 库对 new、delete 和DllMain 函数使用弱外部链接。MFC 库也包含new、delete 和DllMain
函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。
所以需要调整mfcs120d.lib和MSVCRTD.lib这两个lib的连接顺序:以解决此问题:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/410b82da96a6590b7d78a5679a0c262d)
经过以上配置后,问题解决.程序可以顺利编译运行.
感谢http://blog.csdn.net/soloist/article/details/493238提供的第二中解决方法:
直接调整VC工程文件xxxx.vcxproj.将不使用预编译文件的第三方开调整到所有的cpp文件的最后面.这样也可以保证链接顺序正确
在使用VC2013编译工程时,由于使用了第三方库,且该库的cpp文件被调整为Not Using Precompiled Headers.也就是不使用stdafx.h的预编译选项.
导致出现连接冲突.
1>------ Build started: Project: XXXXXX, Configuration: Debug Win32 ------
1>mfcs120d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)
1>.\Debug\XXXXXX.dll : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
以下是第三方库中cpp(cc)文件的编译选项
根据以上MSDN文档的描述
CRT 库对 new、delete 和DllMain 函数使用弱外部链接。MFC 库也包含new、delete 和DllMain
函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。
所以需要调整mfcs120d.lib和MSVCRTD.lib这两个lib的连接顺序:以解决此问题:
经过以上配置后,问题解决.程序可以顺利编译运行.
感谢http://blog.csdn.net/soloist/article/details/493238提供的第二中解决方法:
直接调整VC工程文件xxxx.vcxproj.将不使用预编译文件的第三方开调整到所有的cpp文件的最后面.这样也可以保证链接顺序正确
相关文章推荐
- 错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- [转]在Visual C++中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误(转载)
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- VS2005(VC6)出现如下链接错误的解决方法uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsign
- VS2008(VC6)出现如下链接错误的解决方法uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsign
- VS2008(VC6)出现如下链接错误的解决方法uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsign
- MFC 出现error LNK2005错误的一种原因和解决办法
- VC缺省链接库的顺序不对导致链接错误error LNK2005: "void __cdecl operator delete(void *)"
- 链接错误LNK2005 在MFC库之前链接C运行时库导致的链接错误
- 用MFC编程编译时出现LNK2019的错误,解决办法