【问题标题】:OpenGL error during Qt 6 corss compilation for Raspberry Pi 4Raspberry Pi 4 的 Qt 6 corss 编译期间的 OpenGL 错误
【发布时间】:2021-11-14 09:52:18
【问题描述】:

我正在尝试为 Raspberry Pi 4 交叉编译 Qt 6。以下是我遵循的步骤。
  1. 已安装 crosstool-ng 和相关软件包。
  2. https://github.com/ali1234/rpi-toolchain 获取 rpi 工具链并构建它。
  3. 按照https://wiki.qt.io/Building_Qt_6_from_Git中提到的步骤下载了qt 6源代码。
  4. 为主机系统(Ubuntu 20.04 LTS)成功编译了 qt 6。
  5. 创建了一个 toolchain.cmake:
    toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(tools $HOME/rpi-sdk/toolchain-raspbian--x86_64-arm-linux-gnueabihf)

set(CMAKE_SYSROOT $HOME/rpi-sdk/sysroot)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

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)
  1. 使用 rsync -avz pi@rpi_ip:/lib rsync -avz pi@192.168.0.119:/usr 从目标设备 (rpi 4) 复制文件以创建 sysroot
  2. 获得qt源代码并成功编译主机系统(ubunto 20.04)。
  3. 对于 rpi 交叉编译,在 qtbase/mkspecs 下添加了文件夹“linux-arm-gnueabihf-g++”,并对 qmake.conf 进行了以下更改
# qmake configuration for building with arm-linux-gnueabihf-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabihf-gcc
QMAKE_CXX               = arm-linux-gnueabihf-g++
QMAKE_LINK              = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_NM                = arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-linux-gnueabihf-strip

QMAKE_INCDIR_OPENGL     = $HOME/rpi-sdk/sysroot/usr/include
QMAKE_LIBDIR_OPENGL     = $HOME/rpi-sdk/sysroot/usr/lib/arm-linux-gnueabihf
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
QMAKE_LIBS_OPENGL       = -lGL
QMAKE_LIBS_OPENGL_ES2   = -lGLESv2

load(qt_config)
  1. 我可以看到 rpi-sdk/sysroot/usr/lib/arm-linux-gnueabihf 和 rpi-sdk/sysroot/lib/arm-linux-gnueabihf 下的 opengl 库。据我了解 sysroot/lib 是指向 sysroot/usr/lib 的链接
  2. 使用以下命令配置交叉编译:
    qtbase/configure -release -opengl es2 -nomake examples -nomake tests -qt-host-path $HOME/QT_COMPILATION/qt-host -extprefix $HOME /QT_COMPILATION/qt-rpi -prefix $HOME/QT_COMPILATION/qt-rpi -- -DCMAKE_TOOLCHAIN_FILE=$HOME/rpi-sdk/toolchain.cmake -DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON

我收到以下错误:

ERROR: The OpenGL functionality tests failed!  You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2], QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.

CMake Error at cmake/QtBuildInformation.cmake:72 (message):
  Check the configuration messages for an error that has occurred.
Call Stack (most recent call first):
  cmake/QtBuildInformation.cmake:10 (qt_configure_print_summary)
  cmake/QtBuildInternals/QtBuildInternalsConfig.cmake:365 (qt_print_feature_summary)
  CMakeLists.txt:132 (qt_build_repo_end)

如果我在这里做错了什么,请告诉我。

【问题讨论】:

    标签: qt cross-compiling ubuntu-20.04 raspberry-pi4


    【解决方案1】:

    我遇到了同样的问题,然后找到了这篇文章:https://www.tal.org/tutorials/building-qt-62-raspberry-pi

    为 opengles 添加选项应该可以解决问题:

    $HOME/qt-cross/qtbase/configure -release -opengl es2 -nomake examples -nomake tests \
      -qt-host-path $HOME/qt-host                              \
      -extprefix $HOME/qt6-rpi                                 \
      -prefix /usr/local/qt6                                   \
      -- -DCMAKE_TOOLCHAIN_FILE=$HOME/qt-cross/toolchain.cmake \
      -- -DQT_FEATURE_opengles2=ON                             \
      -- -DQT_FEATURE_opengles3=ON
    

    或者,您可以直接使用 CMake:

    cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DINPUT_opengl=es2 -DQT_BUILD_EXAMPLES=OFF -DQT_BUILD_TESTS=OFF \
      -DQT_HOST_PATH=$HOME/qt-host                           \
      -DCMAKE_STAGING_PREFIX=$HOME/qt6-rpi                   \
      -DCMAKE_INSTALL_PREFIX=/usr/local/qt6                  \
      -DQT_FEATURE_opengles2=ON                              \
      -DQT_FEATURE_opengles3=ON                              \
      -DCMAKE_TOOLCHAIN_FILE=$HOME/qt-cross/toolchain.cmake  \
      $HOME/qt-cross/qtbase
    

    请注意,这使用https://doc-snapshots.qt.io/qt6-dev/configure-linux-device.html; 中描述的默认路径,您希望使其适应您的具体情况。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多