Ubuntu18.04构建Yocto Qt6镜像遇<filesystem>头文件缺失错误求助
问题:Yocto构建Qt6组件时出现
<filesystem>头文件缺失错误 环境与构建配置
Build Configuration: BB_VERSION = "2.2.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "universal" TARGET_SYS = "arm-poky-linux-gnueabi" MACHINE = "raspberrypi3" DISTRO = "poky" DISTRO_VERSION = "4.1.4" TUNE_FEATURES = "arm vfp cortexa7 neon vfpv4 thumb callconvention-hard" TARGET_FPU = "hard" meta meta-poky meta-yocto-bsp = "langdale:3e95f268ce04b49ba6731fd4bbc53b1693c21963" meta-raspberrypi = "langdale:8e3cbfa598de106a78d9a9e27aa25ded51416896" meta-oe meta-multimedia meta-networking meta-python = "langdale:cbbaa82238cd60f08c9b9cb58dde59d5f9318c7b" meta-qt6 = "6.5:a65fb409f4469c087ae3e23ee80fbb2531f1856e"
编译错误信息
| /home/martin/Downloads/yocto/build/tmp/work/x86_64-linux/qtbase-native/6.5.4-r0/git/src/tools/syncqt/main.cpp:24:10: | fatal error: filesystem: No such file or directory | | #include <filesystem> | ^~~~~~~~~~~~ | | compilation terminated.
解决办法
这个错误根源是Ubuntu 18.04默认的GCC版本为7.x,而C++17标准的<filesystem>头文件在GCC 7中仅以std::experimental::filesystem形式存在,Qt6的构建代码直接使用了标准<filesystem>头,因此需要升级GCC版本到8及以上。
方案1:升级主机系统的GCC版本
- 安装GCC 8及对应g++:
sudo apt update && sudo apt install gcc-8 g++-8 - 将GCC 8设置为默认版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 - 验证版本是否生效:
输出应显示gcc --versiongcc (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0或更高版本的GCC 8系列。
方案2:在Yocto构建配置中指定GCC版本
如果不想修改主机默认GCC,可以在Yocto的local.conf文件中添加以下配置,强制构建系统使用更高版本的GCC编译native组件:
GCCVERSION = "8.%" TOOLCHAIN_TARGET_TASK_append = " gcc-multilib g++-multilib"
添加后,重新执行构建命令即可。
内容的提问来源于stack exchange,提问作者Martin Dusek
相关产品推荐
相关产品推荐

