由于引用MFC库导致DllMain重复定义问题解决 error LNK2005

扶醉桌前 提交于 2019-12-09 12:27:46
最近在做一个项目,有个工程叫COMMUtil(DLL工程).原本该项目中用的都是STL中的类。现在由于用了一个第三方的一个日志工具,里面用到了CString等MFC提供的类,所有要加上对MFC的引用。



将原本的使用Windows库改为在共享DLL中使用MFC. 但是编译后会报错。报错内容如下:


----- 已启动生成: 项目: COMMUtil, 配置: Debug Win32 ------
1>正在编译...
1>COMMUtil.cpp
1>正在链接...
1>COMMUtil.obj : error LNK2005: _DllMain @12 已经在 mfcs80d.lib(dllmodul.obj) 中定义
1>..\debug\COMMUtil.dll : fatal error LNK1169: 找到一个或多个多重定义的符号
1>生成日志保存在“file://e:\COMM\COMMUtil\Debug\BuildLog.htm”
1>COMMUtil - 2 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========


解决办法,当添加MFC库时,在其中已经定义了DLLMAIN这个方法,所有需要将我COMMUtil.cpp文件中的DllMain
函数去掉即可。(方法来源: http://www.cnblogs.com/8586/archive/2008/11/13/1332642.html

尝试了一下。确实编译通过

1>------ 已启动生成: 项目: COMMUtil, 配置: Debug Win32 ------
1>正在编译...
1>COMMUtil.cpp
1>正在链接...
1>   正在创建库 ../lib/COMMUtil.lib 和对象 ../lib/COMMUtil.exp
1>正在嵌入清单...
1>生成日志保存在“file://e:\COMM\COMMUtil\Debug\BuildLog.htm”
1>COMMUtil - 0 个错误,0 个警告
========== 生成: 1 已成功, 0 已失败, 0 最新, 0 已跳过 ==========

其实看报错的内容,也能看出来,说是_DllMain @12 已经在 mfcs80d.lib(dllmodul.obj) 中定义,所有DLL工程中的DllMain函数可以去掉了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!