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

Yocto构建STM32MP157镜像后,自定义Qt程序未出现于bin目录问题

Qt应用未出现在目标板的问题排查与修复

核心问题与修复步骤

1. Qt版本不匹配(关键问题)

你使用Qt 6.7.3开发,但配方继承的是cmake_qt5,这会导致构建环境绑定Qt 5的工具链与依赖,无法正确编译Qt 6应用。

  • 将配方末尾的inherit cmake_qt5改为inherit cmake_qt6
  • 调整DEPENDS依赖,适配Qt 6的包名:
    DEPENDS += " qtbase \
                 qtdeclarative \
                 qtquick3d \
                 qtcharts"
    
    (注:qtdeclarative-native是Qt 5专属包,Qt 6中已整合到qtdeclarative,无需单独添加)

2. 编译产物路径错误

do_install中直接引用mygui,但CMake默认在构建目录(${B})生成二进制文件,而非源码目录(${S})。修改do_install:

do_install () {
    install -d ${D}${bindir}
    install -m 0755 ${B}/mygui ${D}${bindir}/
}

(权限建议用0755而非0775,更符合Linux系统标准)

3. 源码目录配置验证

确认S = "${WORKDIR}/mygui"是否匹配你的源码结构:

  • 若所有源码文件(main.cpp、CMakeLists.txt等)存放在配方同级的mygui文件夹下,该配置正确;
  • 若源码直接放在配方目录下,需将S改为"${WORKDIR}",或调整SRC_URI的路径为file://mygui/main.cpp格式。

4. 确认镜像打包包含应用

执行以下命令验证mygui是否被加入镜像安装列表:

bitbake -e st-image-qt | grep IMAGE_INSTALL

若输出中无mygui,检查local.conf是否在当前构建环境中生效,或直接在st-image-qt.bbappend中添加:

IMAGE_INSTALL += "mygui"

修改后的完整配方示例

SUMMARY = "This is the GUI for Hespect Software medical device"
DESCRIPTION = "Recipe created by bitbake-layers"
LICENSE = "CLOSED"
SECTION = "Mysection"

DEPENDS += " qtbase \
             qtdeclarative \
             qtquick3d \
             qtcharts"
             
RDEPENDS_${PN} += "qtwayland"

EXTRA_OECMAKE += "-DCMAKE_PREFIX_PATH=${STAGING_DIR_HOST}${prefix}"

SRC_URI += "file://main.cpp"
SRC_URI += "file://CMakeLists.txt"
SRC_URI += "file://Backendsensors.h"
SRC_URI += "file://Backendsensors.cpp"
SRC_URI += "file://brushfactory.h"
SRC_URI += "file://brushfactory.cpp"
SRC_URI += "file://Main.qml"

# Add SVG images from the assets/images folder
SRC_URI += "file://assets/images/battery-full.svg"
SRC_URI += "file://assets/images/battery-mid.svg"
SRC_URI += "file://assets/images/rss-low.svg"
SRC_URI += "file://assets/images/signal-full.svg"
SRC_URI += "file://assets/images/signal-mid.svg"
SRC_URI += "file://assets/images/battery-low.svg"
SRC_URI += "file://assets/images/rss-full.svg"
SRC_URI += "file://assets/images/rss-mid.svg"
SRC_URI += "file://assets/images/signal-low.svg"

S = "${WORKDIR}/mygui"

do_install () {
    install -d ${D}${bindir}
    install -m 0755 ${B}/mygui ${D}${bindir}/
}

inherit cmake_qt6

验证步骤

  1. 清理之前的构建产物:bitbake -c cleanall mygui
  2. 重新构建应用:bitbake mygui
  3. 检查构建后的包内容:oe-pkgdata-util list-files mygui,确认${bindir}/mygui存在
  4. 重新构建镜像:bitbake st-image-qt
  5. 刷入镜像后,在目标板执行which mygui或查看/usr/bin/目录(默认${bindir}为/usr/bin)

内容的提问来源于stack exchange,提问作者JuanGomez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:33:16