1、Preparation
H618 development board, remote tools like WinSCP and PuTTY, and enabling SSH remote login on Ubuntu.
2、Build Environment Setup
首先,更新系统包列表并安装编译 Qt 所必需的开发工具和依赖库。请在终端中执行以下命令:
sudo apt update
sudo apt install build-essential g++ libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev mesa-common-dev libx11-dev libxext-dev libxtst-dev -y
以上包含了 GCC 编译器、Make 工具以及 Qt 图形界面所需的 X11 和 OpenGL 相关库。

主要是因为未开启 “Universe” 仓库
sudo add-apt-repository universe
sudo apt update
完成上述两步后,再次运行你之前的安装命令即可
3、Source Code Extraction
首先通过wget下载源码压缩包;
wget -c https://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz
如果链接失败,应该是Qt服务器做了IP屏蔽,可通过科学上网下载源码:qt-everywhere-src-5.12.12.tar.xz
,也可以直接通过关注本站官方公众号发送“qt-everywhere-src-5.12.12.tar.xz”获取
下载完成后进行解压
sudo tar -xvf qt-everywhere-src-5.12.12.tar.xz

时间会比较久,解压完成后如图所示:

4、Building and Compiling
4.1 开始构建
通过cd命令,进入到qt-everywhere-src-5.12.12文件夹内,由于Ubuntu22.04系统默认系gcc版本太高(gcc11),Qt 5.12.12 是个比较老的版本,它不支持新版编译器的一些严格检查,所以这里需要先修改两个地方,qtbase/src/corelib/global/qendian.h、qtbase/src/corelib/tools/qbytearraymatcher.h这两个头文件引用处均加上 #include <limits>
sudo vim qtbase/src/corelib/global/qendian.h
修改后qendian.h文件头部大概长这样:
#include <QtCore/qglobal.h>
#include <limits> // <--- 加上这一行
#include <string.h>
// ...
然后Esc输入wq!保存并退出,然后编辑qbytearraymatcher.h文件
sudo vim qtbase/src/corelib/tools/qbytearraymatcher.h
修改后qbytearraymatcher.h文件头部大概长这样:
#include "qbytearray.h"
#include <limits> // <--- 加上这一行
#include <string.h>
修改完成后,输入配置指令,指定安装路径,并为了简化初次编译过程,暂时禁用 OpenGL 支持
./configure -prefix /opt/Qt5.12.12-arm64 -opensource -confirm-license -release -shared -no-opengl -skip qtwebengine
- -prefix /opt/Qt5.12.12-arm64: 指定 Qt 库的安装目录。
- -no-opengl: 禁用 OpenGL,可以避免一些复杂的依赖问题。如果后续需要 OpenGL 支持,可以在成功编译一次后,安装好相关依赖再重新编译。
在执行配置指令之前还需要将qtbase/src/platformsupport/vkconvenience/vkconvenience.cpp文件内容全部注释掉,这是一个 Qt 5.12 的已知问题:即使你告诉 configure 不需要 OpenGL,它依然会尝试编译某些依赖于 OpenGL 头文件的 Vulkan 辅助代码。 编辑文件
sudo vim qtbase/src/platformsupport/vkconvenience/qvkconvenience.cpp
添加宏定义屏蔽代码 在文件的最开头(在 #include 之前),添加一行 #if 0,并在文件的最末尾添加一行 #endif。这相当于把整个文件的内容都注释掉了,因为既然你不需要 OpenGL,也就不需要这个 Vulkan 转 OpenGL 的转换工具。 修改后文件结构如下:
#if 0 // <--- 添加这一行,开始屏蔽
// (这里是文件原有的所有内容,不要动)
// #include ...
// static QVkFormat ...
// case GLFormat::...
#endif // <--- 添加这一行,结束屏蔽
保存并退出,然后输入配置指令,执行配置指令后,等待十几分钟完成,

补充:如果没有-skip qtwebengine,则在配置结束后会有一些警告:

可以不用理会,也不影响核心 Qt 库的编译:
- QDoc / libclang 警告:这是关于生成文档工具的,不影响 Qt 运行。
- QtWebEngine 警告(Python, gperf, bison, flex):
- QtWebEngine 是一个巨大的模块(类似浏览器内核)。
- 警告提示缺少 gperf, bison, flex。如果你不需要编译 Web 浏览器功能,可以忽略这些警告。 如果你确实需要 WebEngine,那编译到那个模块时会失败,到时候再装也不迟。
如果怕耗费的时间太久,也可以把这些库都安装上
sudo apt-get update
sudo apt-get install gperf bison flex python3
Qt 5.12 的配置脚本比较老,它通常只识别 python 命令,而现在的 Linux 系统默认只有 python3。如果不做这一步,配置可能会再次报错找不到 Python。
sudo ln -sf /usr/bin/python3 /usr/bin/python
安装完成后,你需要重新运行刚才的 configure 命令,让它检测到这些新工具:
./configure -prefix /opt/Qt5.12.12-arm64 -opensource -confirm-license -release -shared -no-opengl -skip qtwebengine
如果还是有一些警告,应该还是QtWebEngine,强烈建议放弃编译 QtWebEngine,直接开始编译核心库。 理由如下:
- 资源消耗:QtWebEngine 是基于 Chromium 的,编译它非常消耗内存。在开发板上编译极易导致内存溢出(OOM),直接被系统杀掉进程。
- 时间成本:编译 WebEngine 可能需要数小时甚至更久。
- 替代方案:在嵌入式开发中,通常使用系统的浏览器或者轻量级方案,而不是把整个浏览器内核塞进 Qt。
4.2 开始编译
配置成功后,开始编译。这个过程会非常耗时,具体时间取决于H618开发板的性能。
# 使用 -j 参数可以启用多核并行编译,加快速度。$(nproc) 会自动获取CPU核心数。
make -j$(nproc)
5、安装
编译完成后,将编译好的文件安装到之前指定的目录。
sudo make install
由于H618开发板比不上PC桌面端性能,这里在进行编译的时候,会等待很长时间(大约6、7个小时);
6、配置环境与验证
安装完成后,需要配置环境变量,以便在任何地方都能使用 Qt 的命令。
6.1、配置环境变量
将 Qt 的可执行文件路径和库路径添加到系统环境变量中。
# 将以下两行添加到 ~/.bashrc 文件末尾
echo 'export PATH=/opt/Qt5.12.12-arm64/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/opt/Qt5.12.12-arm64/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
# 使配置立即生效
source ~/.bashrc
6.2、验证安装
最后,通过检查 qmake 的版本来验证 Qt 是否安装成功。
qmake --version
如果安装成功,终端会显示类似 QMake version 3.1, Using Qt version 5.12.12 的信息。
7、程序开发
现在,可以使用 Qt Creator 进行开发了。
-
安装 Qt Creator:为了方便开发,您可以通过 Ubuntu 的包管理器安装一个 Qt Creator。
sudo apt install qtcreator -y -
配置 Kit:打开 Qt Creator,进入
工具->选项->Kits。- 在
Qt versions标签页,点击“添加”,选择您刚刚编译的/opt/Qt5.12.12-arm64/bin/qmake。 - 在
Compilers标签页,确保已经自动检测到GCC编译器。 - 在
Kits标签页,创建一个新套件,将上面添加的 Qt 版本和编译器关联起来。
- 在
完成以上配置后,您就可以创建新的 Qt Widgets 应用程序,并在您的 H618 开发板上直接编写、编译和调试代码了。