基于i.MX6的Yocto构建SDK时nativesdk-qtbase出现QA未打包文件错误求助
问题:Yocto生成SDK时nativesdk-qtbase触发installed-vs-shipped QA错误
我正基于i.MX6,使用Yocto 4.14-sumo及QT5.12配方构建自定义Yocto发行版,嵌入式Yocto构建正常。但执行bitbake abl-image-qt5 -c populate_sdk生成SDK时,nativesdk-qtbase配方出现如下错误:
ERROR: nativesdk-qtbase-5.12.0+gitAUTOINC+13ed06640c-r0 do_package: QA Issue: nativesdk-qtbase: Files/directories were installed but not shipped in any package: /opt/abl-imx-fb/4.14-sumo/sysroots/x86_64-ablsdk-linux/usr/share /opt/abl-imx-fb/4.14-sumo/sysroots/x86_64-ablsdk-linux/usr/share/cmake /opt/abl-imx-fb/4.14-sumo/sysroots/x86_64-ablsdk-linux/usr/share/cmake/OEToolchainConfig.cmake.d /opt/abl-imx-fb/4.14-sumo/sysroots/x86_64-ablsdk-linux/usr/share/cmake/OEToolchainConfig.cmake.d/OEQt5Toolchain.cmake Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install. nativesdk-qtbase: 4 installed and not shipped files. [installed-vs-shipped] ERROR: nativesdk-qtbase-5.12.0+gitAUTOINC+13ed06640c-r0 do_package: Fatal QA errors found, failing task. ERROR: nativesdk-qtbase-5.12.0+gitAUTOINC+13ed06640c-r0 do_package: Function failed: do_package ERROR: Logfile of failure stored in: /home/pierre/repo/claas/build/tmp/work/x86_64-nativesdk-ablsdk-linux/nativesdk-qtbase/5.12.0+gitAUTOINC+13ed06640c-r0/temp/log.do_package.16550 ERROR: Task (/home/pierre/repo/claas/sources/meta-qt5/recipes-qt/qt5/nativesdk-qtbase_git.bb:do_package) failed with exit code '1'
恳请解释该问题出现的原因。
原因解释
这个错误是Yocto的包质量检查(QA)机制触发的,核心逻辑很直接:Yocto要求配方在do_install阶段安装到目标目录的所有文件/目录,必须明确被包含在配方的FILES变量中——也就是要被分配到某个具体的包(比如runtime包、开发包、文档包等)里,否则就会判定为"安装了但未打包"的冗余内容,进而抛出错误。
针对你的场景,具体原因拆解如下:
- 你的
nativesdk-qtbase配方在构建过程中,自动安装了Qt5的cmake工具链配置文件(OEQt5Toolchain.cmake)及其所在的目录结构,但配方的FILES变量并没有包含/usr/share/cmake/...这类路径。Yocto的QA检查发现这些文件存在,但没有被任何包声明要包含,所以触发了installed-vs-shipped错误。 - 出现这种情况的常见诱因:Qt5.12版本的nativesdk配方在生成SDK工具链时,新增了cmake配置文件的安装逻辑,但配方本身没有同步更新
FILES变量来覆盖这些路径;或者你的自定义Yocto配置(比如额外的cmake相关配置)触发了这些文件的生成,但原生配方没考虑到这种场景。 - 需要注意的是,这不是代码编译错误——你的嵌入式构建正常说明Qt本身的编译没问题,只是Yocto的严格校验不允许"无主"文件出现在SDK里,确保SDK的所有内容都有明确的归属和用途。
内容的提问来源于stack exchange,提问作者lalunepierr0t
相关产品推荐
相关产品推荐

