最近在做一个项目,有个工程叫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函数可以去掉了。
来源:oschina
链接:https://my.oschina.net/u/100374/blog/53930