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
验证步骤
- 清理之前的构建产物:
bitbake -c cleanall mygui - 重新构建应用:
bitbake mygui - 检查构建后的包内容:
oe-pkgdata-util list-files mygui,确认${bindir}/mygui存在 - 重新构建镜像:
bitbake st-image-qt - 刷入镜像后,在目标板执行
which mygui或查看/usr/bin/目录(默认${bindir}为/usr/bin)
内容的提问来源于stack exchange,提问作者JuanGomez
相关产品推荐
相关产品推荐

