解决 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)文件的编译选项





根据以上MSDN文档的描述

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

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



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


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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值