Qt Creator在UOS20 ARM系统下的完整配置流程:从源码编译到跑通第一个QML程序
在国产操作系统UOS20上搭建Qt开发环境,对于需要在ARM架构下进行QML开发的工程师来说,是一个既充满挑战又极具价值的过程。不同于常见的x86平台,ARM架构下的Qt开发需要从源码编译开始,经历一系列配置和调试,才能最终在Qt Creator中顺畅运行QML程序。本文将带你完整走过这段旅程,从源码编译Qt 5.15.2开始,到最终在Qt Creator中成功运行第一个QML测试项目。
1. 源码编译前的准备工作
在开始编译Qt源码之前,我们需要确保UOS20系统已经具备了所有必要的编译工具和依赖库。这个过程看似简单,但实际上每一个细节都可能影响到后续的编译结果。
首先,我们需要确认系统已经安装了aarch64-linux-gnu-g++交叉编译器。在终端执行以下命令进行检查:
aarch64-linux-gnu-g++ --version如果系统提示命令未找到,则需要通过以下命令安装:
sudo apt-get install g++-aarch64-linux-gnu接下来,我们需要安装编译Qt所需的基础依赖库。这些库包括但不限于:
- 构建工具链:make、cmake、ninja-build
- 开发库:libgl1-mesa-dev、libxcb-xinerama0-dev
- 字体支持:libfontconfig1-dev
- 多媒体支持:libasound2-dev、libpulse-dev
一个完整的依赖安装命令如下:
sudo apt-get install -y build-essential libgl1-mesa-dev libxcb-xinerama0-dev \ libfontconfig1-dev libasound2-dev libpulse-dev libxkbcommon-dev \ libxkbcommon-x11-dev libxcb-icccm4-dev libxcb-image0-dev \ libxcb-keysyms1-dev libxcb-render-util0-dev libxcb-xkb-dev \ libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev \ libxcb-sync-dev libxcb-xinput-dev libxcb-damage0-dev \ libxcb-composite0-dev libxcb-cursor-dev bison flex gperf \ ruby python libssl-dev libicu-dev libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev提示:在安装依赖库时,建议逐个安装并确认每个库的版本是否符合要求,特别是对于xcb相关库,版本过低可能导致后续编译失败。
2. 下载与配置Qt源码
Qt官方提供了多个版本的源码包,对于UOS20 ARM系统,我们需要特别注意源码包的格式和完整性。推荐从Qt官方镜像下载qt-everywhere-src-5.15.2.tar.xz,而不是.zip格式的压缩包,因为后者可能在Windows环境下被修改过换行符,导致在Linux系统下编译时出现奇怪的错误。
下载完成后,解压源码包:
tar -xvf qt-everywhere-src-5.15.2.tar.xz cd qt-everywhere-src-5.15.2接下来,我们需要创建一个配置脚本来自动化编译过程。新建一个名为autoConfigure.sh的文件,内容如下:
#!/bin/bash ./configure \ -prefix /opt/Qt5.15.2 \ -confirm-license \ -opensource \ -release \ -make libs \ -nomake examples \ -nomake tests \ -pch \ -qt-libjpeg \ -qt-libpng \ -qt-zlib \ -fontconfig \ -system-freetype \ -opengl desktop \ -xcb \ -dbus \ -alsa \ -gif \ -gstreamer 1.0 \ -pulseaudio \ -xplatform linux-aarch64-gnu-g++ \ -skip qtlocation \ -skip qtwebengine \ -skip qtdoc这个配置脚本中几个关键参数说明:
-prefix:指定Qt安装目录,建议设置为/opt/Qt5.15.2-xplatform:指定交叉编译器为aarch64架构-skip:跳过不需要的模块,减少编译时间和潜在问题
给脚本添加执行权限:
chmod +x autoConfigure.sh3. 编译与安装Qt
配置完成后,就可以开始编译了。编译过程可能会持续数小时,取决于硬件性能。建议使用多核编译以加快速度:
./autoConfigure.sh make -j$(nproc)编译过程中可能会遇到各种错误,以下是一些常见问题及解决方案:
问题1:xcb相关错误
ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && libs.xcb && tests.xcb_syslibs && features.xkbcommon-x11' failed.解决方案:确保安装了所有xcb相关开发包:
sudo apt-get install libxcb* libxkbcommon* libx11-xcb-dev问题2:OpenGL错误
ERROR: The OpenGL functionality tests failed!解决方案:安装OpenGL相关开发包:
sudo apt-get install libgl1-mesa-dev libegl1-mesa-dev问题3:DBus相关错误
qdbusmarshaller.cpp:(.text+0x6d0): multiple definition of `QDBusMarshaller::appendVariantInternal(QVariant const&)'解决方案:这个问题通常是由于编译缓存导致的,可以尝试:
make distclean ./autoConfigure.sh make -j$(nproc)编译成功后,执行安装:
sudo make install安装完成后,Qt将被安装到/opt/Qt5.15.2目录下。为了能够在任意位置使用Qt工具,需要将其添加到系统环境变量中。编辑~/.bashrc文件,添加以下内容:
export PATH=/opt/Qt5.15.2/bin:$PATH export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt5.15.2/plugins/platforms export LD_LIBRARY_PATH=/opt/Qt5.15.2/lib:$LD_LIBRARY_PATH使环境变量生效:
source ~/.bashrc4. 配置Qt Creator开发环境
UOS20系统通常自带Qt Creator,如果没有可以通过以下命令安装:
sudo apt-get install qtcreator安装完成后,我们需要配置Qt Creator以使用我们刚刚编译的Qt版本。打开Qt Creator,按照以下步骤操作:
添加Qt版本:
- 进入"工具"→"选项"→"Kits"→"Qt Versions"
- 点击"添加",选择/opt/Qt5.15.2/bin/qmake
- 版本名称可以设置为"Qt 5.15.2 (ARM)"
配置编译器:
- 进入"工具"→"选项"→"Kits"→"Compilers"
- 点击"添加"→"GCC"→"C++"
- 名称设置为"aarch64-linux-gnu-g++"
- 路径通常为/usr/bin/aarch64-linux-gnu-g++
设置构建套件(Kit):
- 进入"工具"→"选项"→"Kits"→"Kits"
- 点击"添加",设置名称如"UOS20 ARM Kit"
- 选择刚才配置的Qt版本和编译器
- 设备类型选择"Desktop"
- Sysroot留空
调试器配置:
- 如果需要调试功能,需要安装gdb-multiarch
sudo apt-get install gdb-multiarch- 然后在Kit配置中选择/usr/bin/gdb-multiarch作为调试器
5. 创建并运行第一个QML项目
现在,我们可以创建一个简单的QML项目来测试我们的配置是否正确。在Qt Creator中:
- 选择"文件"→"新建文件或项目"→"Application"→"Qt Quick Application - Empty"
- 设置项目名称和位置
- 在选择构建套件时,选择我们之前创建的"UOS20 ARM Kit"
- 完成项目创建向导
项目创建完成后,打开main.qml文件,替换为以下简单测试代码:
import QtQuick 2.15 import QtQuick.Window 2.15 Window { width: 400 height: 300 visible: true title: "Qt on UOS20 ARM Test" Rectangle { width: 200 height: 100 anchors.centerIn: parent color: "lightblue" border.color: "darkblue" border.width: 2 radius: 10 Text { text: "Hello UOS20 ARM!" anchors.centerIn: parent font.pixelSize: 20 } } }点击运行按钮,如果一切配置正确,你应该能看到一个简单的窗口显示"Hello UOS20 ARM!"的文本。
6. 常见问题排查
即使按照上述步骤操作,在实际运行过程中仍可能遇到各种问题。以下是一些常见问题及其解决方案:
问题1:无法找到xcb插件
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""解决方案:
- 确认/opt/Qt5.15.2/plugins/platforms/目录下存在libqxcb.so文件
- 确保环境变量QT_QPA_PLATFORM_PLUGIN_PATH已正确设置
- 如果缺少libqxcb.so,可能需要重新编译Qt并确保xcb相关依赖已安装
问题2:运行程序时报错
error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory解决方案:
- 确认LD_LIBRARY_PATH环境变量包含Qt的lib目录
- 或者将Qt的lib目录添加到/etc/ld.so.conf中,然后运行sudo ldconfig
问题3:QML组件无法加载
module "QtQuick" is not installed解决方案:
- 确认Qt编译时没有跳过qtdeclarative模块
- 检查项目的Qt版本是否正确链接到了我们编译的版本
- 在项目.pro文件中确保添加了正确的QT += quick声明
问题4:性能问题
如果发现QML程序运行缓慢,可以尝试:
- 确保编译时使用了-release参数
- 在运行程序时添加-platform eglfs参数(如果支持)
- 检查是否使用了软件渲染而非硬件加速
7. 优化开发工作流
为了提升在UOS20 ARM系统上的Qt开发效率,可以考虑以下优化措施:
远程开发:
- 在性能更强的x86机器上开发,通过远程部署到ARM设备
- 配置Qt Creator的远程部署功能,实现一键编译部署
使用ccache加速编译:
sudo apt-get install ccache export CCACHE_DIR=/path/to/ccache/dir export CC="ccache gcc" export CXX="ccache g++"创建自定义模板:
- 将常用项目配置保存为模板
- 包括.pro文件设置、常用QML组件等
自动化脚本:
- 编写脚本自动化常见任务
- 如清理构建目录、批量资源处理等
性能分析工具:
- 使用Qt自带的QML Profiler分析性能瓶颈
- 在ARM平台上特别关注内存使用和渲染性能
在UOS20 ARM系统上配置完整的Qt开发环境确实需要花费一些时间和精力,但一旦配置完成,就能在这个国产平台上进行高效的QML应用开发。通过本文的详细步骤,你应该能够避开大多数常见的坑,顺利搭建起开发环境。如果在实际使用过程中遇到本文未覆盖的问题,建议查阅Qt官方文档或社区论坛,通常都能找到解决方案。