Debian 11环境从源码编译Qt 6.3.1触发构建错误求助
Qt 6.3.1源码构建48%报moc读取json文件错误解决思路
该报错是Qt 6.3.1版本开启-developer-build配置时的常见问题,和2012款MacBook Pro、Debian 11的硬件/系统环境无直接关联,按以下优先级尝试方案即可:
- 方案1:跳过测试模块构建(优先选,不影响Qt核心功能使用,速度最快)
该错误触发点是qtdeclarative模块下的测试用例编译逻辑bug,不需要编译测试用例的话直接在配置阶段跳过即可。
先清理之前的构建残留:如果直接在源码目录内构建,删除源码根目录下的CMakeCache.txt文件和CMakeFiles文件夹;更稳妥的方式是新建独立构建目录做外部构建,避免污染源码目录。
重新执行配置命令,加上跳过测试、示例的参数:./configure -developer-build -nomake tests -nomake examples
配置完成后重新执行cmake --build .即可正常推进构建流程。 - 方案2:需要保留测试模块编译的话,手动补全缺失目录
报错本质是构建脚本没有提前创建moc自动生成文件的输出目录,导致生成json文件时路径不存在,直接手动创建对应目录即可:mkdir -p /home/yas/Qt-6.3.1/qtdeclarative/tests/auto/qml/qmlsplitlib/tst_qmlsplitlib_autogen/include
目录创建完成后直接重新执行cmake --build .,构建会从断点继续,不需要重头编译。 - 方案3:降低并行编译线程数,规避文件生成时序竞争
如果之前开了高线程数并行编译,可能出现moc进程读取json文件时,负责生成该文件的进程还未完成写入的竞态问题。先执行低线程数编译通过该卡点:cmake --build . -j2
等终端输出过了tst_qmlsplitlib相关的编译步骤后,可以中断编译,再用默认高线程数继续编译剩余部分,不影响最终构建结果。
- 补充说明:Qt 6官方不推荐直接在解压的源码目录内构建,新建独立build目录做外部构建能规避80%以上的路径、缓存类奇怪构建问题,操作示例:
# 假设源码解压在~/qt-everywhere-src-6.3.1路径 mkdir ~/qt6-build && cd ~/qt6-build ~/qt-everywhere-src-6.3.1/configure -developer-build -nomake tests -nomake examples cmake --build .
内容的提问来源于stack exchange,提问作者Yasin
相关产品推荐
相关产品推荐

