找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6678|回复: 2

[分享] error LNK2005:_DllMain@12已经在 MSVCRTD.lib(dllmain.obj) 中定义

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-3 16:40:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

VS2005解决办法:

1)Debug版本:


项目-属性-链接器-输入:忽略特定库中输入mfc80d.lib;mfcs80d.lib
项目-属性-链接器-附加依赖项:mfc80d.lib mfcs80d.lib
就可以保证mfc80d和mfcs80d先于MSVCRTD.lib链接,OK,成功


2)Release版本

与Debug版本不同在于mfc80.lib;mfcs80.lib

Add msvcrtd.lib; mfcs80ud.lib to the Ignore specific library.
Add mfcs80ud.lib msvcrtd.lib to the Additional dependencies.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8121个

财富等级: 富甲天下

发表于 2013-6-3 17:16:20 | 显示全部楼层
去掉 编译指令里面的_USRDLL ,再编译,OK。
参见如下链接:
http://blog.csdn.net/lvcayu/article/details/5895683


uafxcwd.lib(dllmodul.obj) : error LNK2005: DllMain 已经在 中定义

preprocessor多线程filemodulewindowsdll

如果出现这种错误:“uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”或者“mfcs42ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”,那么“See if you have _AFXDLL and _USRDLL in the preprocessor definitions. Try removing one of them”。具体位置:IDE中 菜单Project / Setting / C/C++ / preprocessor definition 。

Project / Setting / C/C++ / 代码生成---->>运行时库---->>多线程调试 DLL (/MDd)



资深员工说加入以下代码:

#include "stdafx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define new DEBUG_NEW

/////////////////////////////////////////////////////////////////////////////
// global data

// The following symbol used to force inclusion of this module for _USRDLL
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif

另外,极有可能是加了#include <afx.h>



后记:

来此取经的有人说:

http://hi.baidu.com/ollyestn/blog/item/c9baf4df832042e676c638a8.html

今天编译又碰到这个DllMain已经在xxx中被定义的问题,搜了一下,情况还很多,不过主要还是预定义的问题,我的预 定义宏如下:

_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;_USRDLL;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE;

网上有人说是:“See if you have _AFXDLL and _USRDLL in the preprocessor definitions. Try removing one of them”。但是我的定义里面只有一个 _USRDLL 而没有 _AFXDLL,但是在stdafx.h中代码中包括了包含了<afxwin.h>。

现在只要去掉_USRDLL ,再编译,OK。

简单的记下来,仅为下次碰到该问题时,不再迷惑。

----不知道是否真切

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-14 16:11:36 | 显示全部楼层
一般什么样的场景下会遇到这个问题?比方说,VC6的工程升级到VC 2005,还是使用了特定的类?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 10:27 , Processed in 0.394303 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表