You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级VS2019后Qt相关LNK2019错误:未解析外部符号_main

解决思路
  • 去掉Qt主入口库的干扰:qtmaind.lib是给Qt程序提供WinMain/main入口用的,但你的MFC项目已经由CWinApp框架提供了WinMain,两者冲突。试试这两种办法:

    1. 打开项目属性 → 链接器 → 输入 → 附加依赖项,删掉qtmaind.lib(Debug模式)或者qtmain.lib(Release模式)
    2. 或者直接在代码里加一行#pragma comment(linker, "/NODEFAULTLIB:qtmaind.lib")(Debug版),强制忽略这个库
  • 检查项目入口点设置:MFC项目的入口点应该是框架自带的_tWinMain,别被改成main了:
    进入项目属性 → 链接器 → 高级 → 入口点,确认值为_tWinMainCRTStartup(Unicode编码)或者WinMainCRTStartup(多字节),绝对不能是mainCRTStartup

  • 修复qtvars.xml的环境污染:你提到运行VS2022后触发问题,大概率是Qt的环境变量被全局覆盖。可以这么处理:

    1. 找到Qt安装目录里的qtvars.xml,一般在Qt\对应版本\msvc2019\bin或你使用的VS版本目录下
    2. 检查其中有没有强制添加链接依赖或修改入口点的配置,比如<env name="LINK" value="... qtmain.lib ..."/>这类全局注入内容,直接注释或删除相关行
    3. 重启VS,删除项目的bin、obj目录后重新构建
  • 隔离MFC和Qt的配置:同一台机器同时运行MFC和Qt项目时,别让配置混在一起:
    给MFC项目单独创建属性表(.props),在里面明确排除Qt相关的库和入口点设置,避免将Qt的全局属性表应用到MFC项目上

  • 对齐CRT库版本:确保项目使用的CRT库和Qt编译时的版本一致,比如都是MDd(Debug多线程DLL)或MTd(Debug多线程静态),版本不匹配也会引发链接冲突:
    进入项目属性 → C/C++ → 代码生成 → 运行库,设置成和Qt编译配置一致的选项

内容的提问来源于stack exchange,提问作者GTAE86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:52:13