因为引用MFC库致使DllMain重复定义问题解决 error LNK2005

最近在作一个项目,有个工程叫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函数能够去掉了。
相关文章
相关标签/搜索