本文来自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)文件的编译选项
根据以上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文件的最后面.这样也可以保证链接顺序正确