当前位置: 首页 > news >正文

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7
vs2013 + qt add-in 2.3.2

起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001
一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因为有Git,可以看到.vcxproj文件里被删掉了一部分文件正是Generated Files里缺少的,随即将.vcxproj还原,但这些文件竟然跑到了Header Files和Source Files下面,而且编译仍然是报错的
在这里插入图片描述
这种情况以前也发生过几次,貌似都是发生在把文件拖进项目或者从VS里删除文件,只要这个文件包含Q_OBJECT声明的就会出事,但一般只影响某一个类,不会涉及其它,这时候只要把类的.cpp、.h、.ui文件从项目移除再重新添加就可以编译了

这次是导致大量类的生成文件都炸了,可能是QT元对象系统和VS这两干架了出BUG了,导致VS项目的.vcxproj和.vcxproj.filters全乱套了!

尝试急救:先把所有的moc_和ui_文件还有一个“qrc_项目名.cpp”文件从项目移除(包括Generated Files下面的),清理项目,重新编译,此时虽然GeneratedFiles文件夹里生成了moc_和ui_文件,但这些文件并不会自动添加至项目里(即VS界面上的Generated Files仍然是空的);此时再手动将生成的文件按照GeneratedFiles、GeneratedFiles\Debug、GeneratedFiles\Release各自拖到VS项目里,这样就可以正常编译了
如果用了Git注意新添加进来的文件会被识别为变更,要自行排除掉


彩蛋:上面moc_和ui_文件跑到Header Files和Source Files下的原因可能出在.vcxproj.filters文件里的UniqueIdentifier,它是VS自动生成的一个唯一识别号,一般第一次创建过滤器,以后就固定不变了。如果发生改变就无法定位过滤器,然后vs就会自动把.cpp扔到Source Files,.h扔到Header Files,可能是还原.vcxproj文件时导致UniqueIdentifier被VS改变了。实测自己手动把GeneratedFiles文件夹删掉并不会改变其UniqueIdentifier,说明跟实际的文件没关系

    <Filter Include="Generated Files"><UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier><Extensions>moc;h;cpp</Extensions><ParseFiles>true</ParseFiles></Filter><Filter Include="Generated Files\Debug"><UniqueIdentifier>{d4bcdb24-fb53-4163-bbc4-ac603910a6b4}</UniqueIdentifier><Extensions>cpp;moc</Extensions><SourceControlFiles>False</SourceControlFiles></Filter><Filter Include="Generated Files\Release"><UniqueIdentifier>{a0ab4529-1ce5-4c3d-9668-2665c25dfc11}</UniqueIdentifier><Extensions>cpp;moc</Extensions><SourceControlFiles>False</SourceControlFiles></Filter>

对于Git项目,.vcxproj和.vcxproj.filters因为该问题产生的变更是无意义的,可以通过把.vcxproj和.vcxproj.filters复原为原来的版本,但不要直接在VS里还原,而是要先关闭VS,然后自己手动修改替换文件,这样是可以正常编译的

http://www.lqws.cn/news/119215.html

相关文章:

  • JavaWeb:前端工程化-TS(TypeScript)
  • 经典ReLU回归!重大缺陷「死亡ReLU问题」已被解决
  • 【大模型:知识图谱】--4.neo4j数据库管理(cypher语法1)
  • day027-Shell自动化编程-基础
  • 回归任务和分类任务损失函数详解
  • Docker轻松搭建Neo4j+APOC环境
  • IOS 打包账号发布上传和IOS Xcode证书配置
  • 华为云Flexus+DeepSeek征文|基于华为云MaaS平台的DeepSeek大模型与云服务单机+CCE高可用部署实践
  • 使用 React Native 开发鸿蒙运动健康类应用的​​高频易错点总结​​
  • 【uniapp开发】picker组件的使用
  • OSCP靶机练习PG hokkaido
  • HTML基础学习
  • 豆包突然没法用了,一打开就提示网络连接错误
  • Python Flask中启用AWS Secrets Manager+AWS Parameter Store配置中心
  • Spring Boot微服务架构(十):Docker与K8S部署的区别
  • LVS、NGINX、HAPROXY的调度算法
  • LeetCode 3226.使两个整数相等的位更改次数
  • 可编辑精品PPT | 大型企业数字化转型顶层业务架构模型解决方案数字化架构图合集可编辑架构图系统架构图技术架构图
  • vimadbgit命令
  • 前端八股之JS的原型链
  • Linux开发工具(apt,vim,gcc)
  • 二叉数-965.单值二叉数-力扣(LeetCode)
  • Open SSL 3.0相关知识以及源码流程分析
  • 内存管理【Linux操作系统】
  • ArcGIS Pro 3.4 二次开发 - 共享
  • docker镜像下载到本地,并导入服务器
  • ES海量数据更新及导入导出备份
  • 高防服务器价格高原因分析
  • git引用概念(git reference,git ref)(简化对复杂SHA-1哈希值的管理)(分支引用、标签引用、HEAD引用、远程引用、特殊引用)
  • mysql知识点