You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto构建Qt6嵌入式应用报错:缺失Qt6QuickTools依赖

Qt6嵌入式部署依赖缺失问题

错误信息

Qt6Quick could not be found because dependency Qt6QuickTools could not be found.
Could NOT find Qt6QuickTools (missing: Qt6QuickTools_DIR)

Yocto配方

SUMMARY = "Qt application recipe"   
DESCRIPTION = "This recipe builds the Application"   
LICENSE = "CLOSED"   
LIC_FILES_CHKSUM = ""

DEPENDS += "qtbase qtdeclarative qtcharts qtimageformats qtscxml qtmultimedia qtquick3d"

RDEPENDS:${PN} += "qtsvg \
qtdeclarative-qmlplugins \
ttf-dejavu-sans \
ttf-dejavu-serif \
"

SRC_URI = "github url"
SRCREV = "github commit hash"

S = "${WORKDIR}/git"

inherit qt6-cmake
     
do_install() {   
    install -d ${D}/opt/app/   
    install -m 0755 app ${D}/opt/app/   
    install -m 0755 ${S}/mod/setup.sh ${D}/opt/app/
    cp -r ${S}/*  ${D}/opt/app/
}   
    
FILES:${PN} += "/opt/app/* "

Qt项目CMake配置

cmake_minimum_required(VERSION 3.16)
project(project VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Quick)
find_package(Qt6 REQUIRED COMPONENTS Core)
find_package(Qt6 REQUIRED COMPONENTS QuickControls2)
find_package(Qt6 REQUIRED COMPONENTS Qml)
find_package(Qt6 REQUIRED COMPONENTS Charts)

set(PROJECT_SOURCES
        main.cpp
        ...
        qml.qrc
)

qt_add_executable(project
    MANUAL_FINALIZATION
    ${PROJECT_SOURCES}
)

target_link_libraries(project PRIVATE Qt6::Core)
target_link_libraries(project PRIVATE Qt6::Quick)
target_link_libraries(project PRIVATE Qt6::QuickControls2)
target_link_libraries(project  PRIVATE Qt6::Charts)
target_link_libraries(project PRIVATE Qt6::Qml)


if(QT_VERSION_MAJOR EQUAL 6)
    qt_import_qml_plugins(project)
    qt_finalize_executable(project)
endif()

问题背景

应用在Qt5下可正常构建运行,Windows开发环境的Qt6版本也能正常运行,但Yocto构建时出现Qt6QuickTools依赖缺失,网上找不到该组件相关信息。


解决方案

1. 检查Yocto Qt6元层配置

Qt6QuickTools并非Qt官方公开组件,该错误大概率是Yocto构建Qt6时的内部依赖解析问题,或是meta-qt6配方的组件命名差异:

  • 确保使用的meta-qt6层版本与应用依赖的Qt6版本匹配,不同版本的meta-qt6对组件打包逻辑有差异。
  • 执行bitbake -e qtdeclarative | grep PACKAGECONFIG,查看qtdeclarative的配置项是否启用了quick、qml等必要模块,缺失的话需要在local.conf中添加对应配置,例如:
    PACKAGECONFIG:append:pn-qtdeclarative = " quick qml"
    

2. 优化CMake组件查找逻辑

Windows环境下Qt6的依赖是隐式处理的,但Yocto嵌入式环境需要更明确的配置:

  • 合并重复的find_package调用,减少依赖解析冲突:
    find_package(Qt6 REQUIRED COMPONENTS Core Quick Qml QuickControls2 Charts)
    
  • 如果应用不需要自动导入所有QML插件,可暂时注释qt_import_qml_plugins(project),避免触发额外的依赖查找。

3. 补充Yocto构建依赖

在配方的DEPENDS中添加qtdeclarative-dev,确保构建阶段能获取到QtQuick的开发文件:

DEPENDS += "qtbase qtdeclarative qtdeclarative-dev qtcharts qtimageformats qtscxml qtmultimedia qtquick3d"

4. 手动指定Qt6Quick路径(临时方案)

若上述方法无效,可在CMake中直接指定Qt6Quick的配置路径,绕过错误的依赖查找:

set(Qt6Quick_DIR "${OE_QMAKE_PATH_QT}/lib/cmake/Qt6Quick")
find_package(Qt6 REQUIRED COMPONENTS Quick)

OE_QMAKE_PATH_QT是Yocto继承qt6-cmake后自动设置的Qt6安装路径变量。


内容的提问来源于stack exchange,提问作者Lenni M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:35:20