解决 Visual C++2013 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误

本文来自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)文件的编译选项

解决 Visual C++2013 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误_第1张图片




根据以上MSDN文档的描述

CRT 库对 newdeleteDllMain 函数使用弱外部链接。MFC 库也包含newdeleteDllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

所以需要调整mfcs120d.lib和MSVCRTD.lib这两个lib的连接顺序:以解决此问题:

解决 Visual C++2013 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误_第2张图片


经过以上配置后,问题解决.程序可以顺利编译运行.


感谢http://blog.csdn.net/soloist/article/details/493238提供的第二中解决方法:

直接调整VC工程文件xxxx.vcxproj.将不使用预编译文件的第三方开调整到所有的cpp文件的最后面.这样也可以保证链接顺序正确

解决 Visual C++2013 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误_第3张图片

你可能感兴趣的:(Visual,C++,2013)