原创作者:郑同学的笔记
原文链接:https://zhengjunxue.blog.csdn.net/article/details/143653358

一、源码构建、编译qt,构建时,错误:嵌套名指定中使用了不完全的类型

  • 错误
    如下图,源码编译安装qt遇到了如下错误:错误:嵌套名指定中使用了不完全的类型
    在这里插入图片描述

错误:嵌套名指定中使用了不完全的类型‘QtMetaTypePrivate::ContainerCapabilitiesImpl<QStringList, void>’
, _iteratorCapabilities(ContainerAPI::IteratorCapabilities | (1 << 4) | (ContainerCapabilitiesImpl::ContainerCapabilities << (4+3)))
^
/home/dev1/下载/qt-everywhere-src-5.15.15/qtbase/include/QtCore/…/…/src/corelib/kernel/qmetatype.h:1169:68: 错误:嵌套名指定中使用了不完全的类型‘QtMetaTypePrivate::ContainerCapabilitiesImpl<QStringList, void>’
, _copyIter(IteratorOwner::assign)

二、如何解决

1、查看源码文件中的README

发现源码编译qt有以下三个要求

    • Perl 5.8 or later
    • Python 2.7 or later
    • C++ compiler supporting the C++11 standard

在这里插入图片描述

2、我系统中的软件版本

  • Perl 满足
  • Python 满足

C++ compiler supportng the C++11 standard?是否满足?因为我用的是系统自带的gcc/g++4.85不清楚g++4.8.5是否支持C++ 11,

3、g++编译器版本和c++标准版本的对应关系

文章介绍如下,g++每个版本和c++标准的对对应关系https://zhengjunxue.blog.csdn.net/article/details/143653681
在这里插入图片描述
虽然从文章中显示g++4.8支持c++11,但是文章中还有如下一句话。

不同的 g++ 版本可能会逐步完善对某些新标准的支持,因此有时最新的标准可能在某些早期版本的 g++ 中未得到完全支持。

所以,我的结论是g++4.8.5对c++11标准没有完全支持的原因,所以,我决定升级到g++9.3.0

4、解决方案:安装g++9.3

  • 可以参考我之前升级gcc\g++的文章。

5、重新构建编译qt

  • 成功
    在这里插入图片描述
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐