环境: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)就解决问题了。

3919

被折叠的 条评论
为什么被折叠?



