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

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.xdnf.cn/news/11872.html

相关文章:

  • Python_day44
  • 定制开发开源AI智能名片S2B2C商城小程序在无界零售中的应用与行业智能升级示范研究
  • NeRF PyTorch 源码解读 - NDC空间
  • AI,如何重构理解、匹配与决策?
  • FFmpeg avformat_open_input函数分析
  • [蓝桥杯]密文搜索
  • 深入解析 Java ClassLoader:揭开 JVM 动态加载的神秘面纱
  • CSP-J 信奥竞赛大纲(2025)
  • C语言-指针基础概念
  • 图神经网络实战——图属性度量方法详解
  • @Prometheus 监控-MySQL (Mysqld Exporter)
  • 【从GEO数据库批量下载数据】
  • docker生命周期
  • 结构性设计模式之Flyweight(享元)
  • Linux基本指令(三)
  • 【投稿优惠】2025年人工智能与图像处理国际会议(AIIP 2025)
  • 物联网协议之MQTT(一)基础概念和设备
  • 【Web应用】若依框架:基础篇14 源码阅读-后端代码分析
  • 瀚文(HelloWord)智能键盘项目深度剖析:从0到1的全流程解读
  • [特殊字符] Spring Boot底层原理深度解析与高级面试题精析
  • webpack继续学习
  • 一个小小的 flask app, 几个小工具,拼凑一下
  • epoll
  • HikariCP 可观测性最佳实践
  • 你工作中涉及的安全方面的测试有哪些怎么回答
  • STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI
  • ESOP交易系统搭建全景指南:从合规基石到价值跃迁
  • 人机融合智能 | 可穿戴计算设备的多模态交互
  • Vue中的自定义事件
  • PLC远程控制网关支持多塘口水环境数据边缘计算与远程安全传输的配置指南