Yocto构建Qt6应用报错:无法找到CMAKE_AR(aarch64-poky-linux-gcc-ar)
解决Yocto Kirkstone构建QtQuick应用时CMAKE_AR找不到的问题
问题根源
- 禁用默认依赖导致工具链缺失:配方中
INHIBIT_DEFAULT_DEPS = "1"会阻止Yocto自动拉取交叉编译必需的工具链组件(如aarch64-poky-linux-gcc-ar)和Qt依赖包。 - CMakeLists包含桌面平台冗余配置:Qt Creator生成的默认配置包含
MACOSX_BUNDLE、WIN32_EXECUTABLE等桌面专属属性,会干扰嵌入式交叉编译流程。 - 配方依赖声明不完整:未明确指定Qt相关依赖,导致构建环境缺少必要的Qt组件支持。
解决方案
1. 修复自定义配方usw.bb
移除禁用默认依赖的配置,明确声明Qt依赖,调整文件路径配置:
SUMMARY = "Custom QtQuick Application" LICENSE = "MIT" # 请确保添加LICENSE文件并更新校验值,或根据实际许可证调整 LIC_FILES_CHKSUM = "file://LICENSE;md5=d41d8cd98f00b204e9800998ecf8427e" FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI = " \ file://main.cpp \ file://Main.qml \ file://WatchItem.qml \ file://CMakeLists.txt \ " S = "${WORKDIR}" PACKAGE_ARCH = "${MACHINE_ARCH}" # 明确声明Qt依赖组件 DEPENDS = "qtbase qtdeclarative" inherit qt6-cmake
2. 调整CMakeLists.txt适配嵌入式构建
删除桌面平台专属配置,简化安装规则:
cmake_minimum_required(VERSION 3.16) project(usw VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 适配Yocto提供的Qt6版本,无需硬编码6.4 find_package(Qt6 REQUIRED COMPONENTS Quick) qt_standard_project_setup() qt_add_executable(appusw main.cpp ) qt_add_qml_module(appusw URI usw VERSION 1.0 QML_FILES Main.qml WatchItem.qml ) target_link_libraries(appusw PRIVATE Qt6::Quick ) # 仅保留嵌入式平台需要的安装规则 install(TARGETS appusw RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
3. 清理缓存并重新构建
- 清理目标包的构建状态:
bitbake -c cleansstate usw - 单独测试构建自定义包:
bitbake usw - 确认构建成功后,再构建完整镜像:
bitbake core-image-weston
4. 可选:手动补充工具链组件(若仍有问题)
如果上述步骤后仍报错,可在local.conf中手动添加工具链任务:
TOOLCHAIN_TARGET_TASK:append = " gcc-ar"
说明
- 移除
INHIBIT_DEFAULT_DEPS是核心修复:Yocto的默认依赖管理会自动处理交叉编译工具链的拉取和配置,禁用后会导致工具链组件缺失。 - 简化CMake配置可避免桌面平台属性对嵌入式构建的干扰,确保CMake使用Yocto生成的工具链文件正确配置交叉编译环境。
内容的提问来源于stack exchange,提问作者foreverska
相关产品推荐
相关产品推荐

