1、准备阶段

H618开发板、WinSCP和Putty等远程工具,Ubuntu系统开启ssh远程登录

2、搭建编译环境

首先,更新系统包列表并安装编译 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 相关库。

image_105132052963403

主要是因为未开启 “Universe” 仓库

sudo add-apt-repository universe
sudo apt update

完成上述两步后,再次运行你之前的安装命令即可

3、源码解压

首先通过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

1777006979638

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

4、构建和编译

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 // <--- 添加这一行,结束屏蔽

保存并退出,然后输入配置指令,执行配置指令后,等待十几分钟完成,

1777018998303

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

image_364949391507039

可以不用理会,也不影响核心 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

    1. Qt versions 标签页,点击“添加”,选择您刚刚编译的 /opt/Qt5.12.12-arm64/bin/qmake
    2. Compilers 标签页,确保已经自动检测到 GCC 编译器。
    3. Kits 标签页,创建一个新套件,将上面添加的 Qt 版本和编译器关联起来。

完成以上配置后,您就可以创建新的 Qt Widgets 应用程序,并在您的 H618 开发板上直接编写、编译和调试代码了。