【发布时间】:2021-11-14 09:52:18
【问题描述】:
我正在尝试为 Raspberry Pi 4 交叉编译 Qt 6。以下是我遵循的步骤。
- 已安装 crosstool-ng 和相关软件包。
- 从https://github.com/ali1234/rpi-toolchain 获取 rpi 工具链并构建它。
- 按照https://wiki.qt.io/Building_Qt_6_from_Git中提到的步骤下载了qt 6源代码。
- 为主机系统(Ubuntu 20.04 LTS)成功编译了 qt 6。
- 创建了一个 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)
- 使用 rsync -avz pi@rpi_ip:/lib rsync -avz pi@192.168.0.119:/usr 从目标设备 (rpi 4) 复制文件以创建 sysroot
- 获得qt源代码并成功编译主机系统(ubunto 20.04)。
- 对于 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)
- 我可以看到 rpi-sdk/sysroot/usr/lib/arm-linux-gnueabihf 和 rpi-sdk/sysroot/lib/arm-linux-gnueabihf 下的 opengl 库。据我了解 sysroot/lib 是指向 sysroot/usr/lib 的链接
- 使用以下命令配置交叉编译:
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