使用 yocto sdk 交叉编译 Qt6 - QWayland 缺少要求

问题描述 投票:0回答:1

我想用 yocto SDK 交叉编译 Qt6.5。 首先,我编译了 Qt 主机版本,没有任何问题。

qt-host -> installation folder of host-build
qt-hostbuild -> build folder of host build
qt6-build -> build folder of device
qt6-device -> installation folder of device-build

主机构建:

cmake ../qt5/ -GNinja -DFEATURE_developer_build=ON -DQT_BUILD_EXAMPLES=OFF -DQT_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=$HOME/qt-host

交叉编译:

../qt5/configure -release -nomake examples -nomake tests -skip qtwebengine -skip qtwebkit -sysroot $HOME/sdk/sysroot/cortexa53-crypto-linux -qt-host-path $HOME/qt-host -extprefix $HOME/qt6-device -prefix /home/qt6 -- -DCMAKE_TOOLCHAIN_FILE=$HOME/toolchain.cmake

但是当我想配置设备的构建时,我在 qtwayland 子模块的配置过程中得到提示。

qtwayland/src/CMakeLists.txt:25 处的 CMake 警告(消息): QtWayland 缺少必需的依赖项,因此不会构建任何内容。 尽管这可能被视为错误,但配置仍然会 pass as coin(Qt 的持续集成系统)将在以下情况下失败: 配置失败,但仍会尝试在目标上配置模块 缺少依赖项。

我的设备使用 Wayland 和 Weston 合成器。 wayland-scanner 二进制文件位于 sysroot/x86_64-linux/usr/bin 文件夹中。

我在 qtwayland 的 CMakeLists.txt 中添加了三个输出,即输出变量 Wayland_FOUND、Wayland_VERSION 和 WaylandScanner_FOUND。

[QtWayland] Wayland_FOUND="TRUE"
[QtWayland] Wayland_VERSION="1.20.0"
[QtWayland] WaylandScanner_FOUND="FALSE"

所以主要问题是我认为 WaylandScanner_FOUND 是错误的。 但为什么没有找到呢? 这是我的 toolchain.cmake 文件。是不是少了点什么?

cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(TARGET_SYSROOT /home/sdk/sysroots/cortexa53-crypto-linux)
set(CROSS_COMPILER /home/sdk/sysroots/x86_64-linux/usr/bin/aarch64-linux)

set(CMAKE_SYSROOT ${TARGET_SYSROOT})
set(CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT})

set(ENV{PKG_CONFIG_PATH} "")
set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig)
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})

set(CMAKE_C_COMPILER ${CROSS_COMPILER}/aarch64-linux-gcc)
set(CMAKE_CXX_COMPILER ${CROSS_COMPILER}/aarch64-linux-g++)

set(QT_COMPILER_FLAGS "-march=armv8-a+crc+crypto ")
set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe")
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

include(CMakeInitializeConfigs)

function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
  if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS")
    set(CMAKE_${CMAKE_MATCH_1}_FLAGS_INIT "${QT_COMPILER_FLAGS}")

    foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO)
      if (DEFINED QT_COMPILER_FLAGS_${config})
        set(CMAKE_${CMAKE_MATCH_1}_FLAGS_${config}_INIT "${QT_COMPILER_FLAGS_${config}}")
      endif()
    endforeach()
  endif()

  if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS")
    foreach (config SHARED MODULE EXE)
      set(CMAKE_${config}_LINKER_FLAGS_INIT "${QT_LINKER_FLAGS}")
    endforeach()
  endif()

  _cmake_initialize_per_config_variable(${ARGV})
endfunction()

谢谢

linux qt cross-compiling arm64
1个回答
0
投票

好的,我明白了。 我在 Qt6 cross compil for imx6 with Wayland support

找到了最终提示

您还必须为主机构建编译 Wayland 支持!

© www.soinside.com 2019 - 2024. All rights reserved.