关于VS2019中使用MFC,使用静态库时出现LNK2005和LNK1169时的问题
最近刚学MFC几天,前几天碰到一个问题,我自己创建的项目是基于静态库,然后就出现了一堆LNK2005和LNK1169的问题,具体如下:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2005 “protected: void __thiscall CMFCControlContainer::PreUnsubclassControl(class CWnd *)” (?PreUnsubclassControl@CMFCControlContainer@@IAEXPAVCWnd@@@Z) 已经在 afxnmcdd.lib(afxctrlcontainer2.obj) 中定义 MFCApplication2 C:\Users\哑剧。\source\repos\MFCApplication2\uafxcwd.lib(afxctrlcontainer2.obj) 1
当时也不懂啊,就疯狂百度,然后发现一个帖子说在属性中改成动态库就行了。当时试了一下,果然没问题了。
但是当快做完要生成exe的时候,发现了动态库的鸡肋,动态库生成的exe不能在没有VC的电脑上运行,即动态库生成的exe程序必须基于电脑自带的VC库才能运行,而大部分人想做的都是一个在任何电脑上都能运行的小程序,于是又改成了静态库,结果还是同样的错误。
在网上找了很久,什么改链接器设置,改C/C++设置,反正就在属性了一通乱改,发现还是不行,要么出现其它问题,要么还是老问题,后来发现了这一个答案:
解决方法很简单,打开stdafx.h文件,注释掉 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS
但是我发现,我的是VS2019啊,压根找不到这个文件,后来查了,VS2017以后,stdafx.h就已经改成了pch.h。但是打开这个文件以后发现里面啥也没有,也根本没有#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS这句话,于是又开始接着百度了。
经过数个小时的努力,我找到了这篇文章:
http://blog.chinaunix.net/uid-21222282-id-1829254.html
看到了这一句:
在项目->属性->链接器->命令行->附加选项中加 /force
虽然只是其中的一句话,我实在没办法就试了试,结果就能编译了。
我知道这只是把重复定义给忽略了,我也看到过很多说的很详细的内容,但是仍然无法解决,作为一个初学者我只是要我的程序能正常运行就行了,运行会有警告,但是不会报错,在这里给大家一个解决思路。