升级VS2019后Qt相关LNK2019错误:未解析外部符号_main
解决思路
去掉Qt主入口库的干扰:qtmaind.lib是给Qt程序提供WinMain/main入口用的,但你的MFC项目已经由CWinApp框架提供了WinMain,两者冲突。试试这两种办法:
- 打开项目属性 → 链接器 → 输入 → 附加依赖项,删掉
qtmaind.lib(Debug模式)或者qtmain.lib(Release模式) - 或者直接在代码里加一行
#pragma comment(linker, "/NODEFAULTLIB:qtmaind.lib")(Debug版),强制忽略这个库
- 打开项目属性 → 链接器 → 输入 → 附加依赖项,删掉
检查项目入口点设置:MFC项目的入口点应该是框架自带的
_tWinMain,别被改成main了:
进入项目属性 → 链接器 → 高级 → 入口点,确认值为_tWinMainCRTStartup(Unicode编码)或者WinMainCRTStartup(多字节),绝对不能是mainCRTStartup修复qtvars.xml的环境污染:你提到运行VS2022后触发问题,大概率是Qt的环境变量被全局覆盖。可以这么处理:
- 找到Qt安装目录里的
qtvars.xml,一般在Qt\对应版本\msvc2019\bin或你使用的VS版本目录下 - 检查其中有没有强制添加链接依赖或修改入口点的配置,比如
<env name="LINK" value="... qtmain.lib ..."/>这类全局注入内容,直接注释或删除相关行 - 重启VS,删除项目的bin、obj目录后重新构建
- 找到Qt安装目录里的
隔离MFC和Qt的配置:同一台机器同时运行MFC和Qt项目时,别让配置混在一起:
给MFC项目单独创建属性表(.props),在里面明确排除Qt相关的库和入口点设置,避免将Qt的全局属性表应用到MFC项目上对齐CRT库版本:确保项目使用的CRT库和Qt编译时的版本一致,比如都是MDd(Debug多线程DLL)或MTd(Debug多线程静态),版本不匹配也会引发链接冲突:
进入项目属性 → C/C++ → 代码生成 → 运行库,设置成和Qt编译配置一致的选项
内容的提问来源于stack exchange,提问作者GTAE86
相关产品推荐
相关产品推荐

