VS2019报错“error LNK2005: DllMain 已经在 MSVCRT.lib(dll_dllmain_stub.obj) 中定义“的解决过程

环境:v142工具集;windows SDK是10.0.22000.0;C++14标准。

用过的方法
方法一:调整链接器库搜索顺序
打开项目属性(Project → Properties)。
进入 Linker → Input。
在 Ignore Specific Default Libraries 字段中添加以下库:
MSVCRTD.lib mfcs90ud.lib
在 Additional Dependencies 字段中显式指定链接顺序:
mfcs90ud.lib MSVCRTD.lib
这样可以确保 MFC 库优先于 CRT 库被链接,避免重复定义问题。

tip:mfcxxx.lib(其中 xxx 是 Visual Studio 的版本号,例如 mfc140.lib)。

方法二:检查运行时库设置
在项目属性中,进入 C/C++ → Code Generation → Runtime Library,确保所有模块使用一致的运行时库设置(如 /MT 或 /MDd)。不一致的设置可能导致 CRT 和 MFC 使用不同的库版本,从而引发冲突。

方法三:在“配置属性” → “常规”中,检查“MFC 的使用”选项,应选择“在共享 DLL 中使用 MFC”。

解决过程:我的项目需要用到鼠标钩子函数,最初头文件只使用了afx.h,然后报错LNK2005,经过网上各种方法都没去得效果,所以我换了个思考方向——使用钩子函数时需要哪些头文件和配置属性,根据找到的资料,把afx.h换成windows.h和winuser.h(有时需要winternl.h)就解决问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值