搭建 Qt 开发环境的几种方式:
- Qt 官方下载页面 支持 ≤5.12.12 、x86 架构的离线安装包(Windows/Linux/Mac );
- 比 5.12.12 更新只有在线安装包;Qt 目前已经支持 ARM 架构,但只有在线安装包;
- Qt 从源码构建安装,费时费力还容易出错。我还没掌握
- Qt 在 Linux 还可以通过各系统的软件仓库安装,版本陈旧,也需要联网
使用在线安装工具,默认只展示最新的三个 Qt 版本供用户安装。右侧筛选项,勾选 Archive 后筛选就会列出旧版本的 Qt 。
Ubuntu 20.04.1 LTS (Focal Fossa)
为什么选择这个版本的系统来学习?
公司业务线目前采用的 Kylin V10 桌面版。无论是含掉电保护模式的 HJ 版,还是“物美价廉”的 GF 版,大厦基石都一致:
Linux version 5.4.18 , gcc version 9.3.0
推断两者都是基于 Ubuntu 20.04 LTS ,改用 UKUI 桌面环境的换皮版。 所见略同。
以下是不同的版本:联网安装时会自动更新 Linux 内核!! 查看内核版本 uname -a
- ubuntu-20.04 ,发布于 2020-04-23, 在 2025-04 支持结束
- ubuntu-20.04.1 ,Linux version 5.4.0 Ubuntu 旧版本
- ubuntu-20.04.2 ,Linux version 5.8
- ubuntu-20.04.6 ,Linux version 5.15.0
思考:公司产品都是采用 Arm 架构的飞腾主板,我只有 x86 的电脑。底层架构都不一致,争取 Linux kernel 一致性有没有必要?
Qt 5.12.8
在 ubuntu-20.04.1 系统中使用 qt-opensource-linux-x64-5.12.8.run 离线安装包时,勾选 Qt 库及其源代码,缺少 debug info 导致断点调试无法进入 Qt 源代码。
如果使用 online 安装包,可以同时勾选、下载 debug info 。但 online 安装包只支持 Qt5.15.1 、 Qt5.15.2 和 Qt6.x 。
调试信息需要另行下载:必须选择较新的 202004051456qtbase 包!我试过 202003131355qtbase 包,不成功。
Qt 打包的历史仓库中,并没有 arm 架构下 Qt5.x 的离线安装包、库文件、debug info 等。
Ubuntu下跟踪调试QT源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 安装开发工具,以及之后使用 QtCreator 依赖的库 sudo apt update sudo apt install openssh-client openssh-server \ open-vm-tools open-vm-tools-desktop \ git build-essential vim \ libxcb-cursor-dev mesa-common-dev libglu1-mesa-dev libxcb-xinerama0 # 不要更新(避免更新 Linux kernal) reboot sudo ./qt-opensource-linux-x64-5.12.8.run # 9+qDuLth.F@MD#8 wget https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt5_5128/qt.qt5.5128.debug_info.gcc_64/5.12.8-0-202004051456qtbase-Linux-RHEL_7_4-GCC-Linux-RHEL_7_4-X86_64-debug-symbols.7z # 解压后,将 debug info 放到 Qt lib 路径下 sudo mv ./5.12.8/gcc_64/lib/*.debug /opt/Qt5.12.8/5.12.8/gcc_64/lib/ # 在 QtCreator 中进行源码路径映射 # 下载 demo 进行测试 export http_proxy='http://192.168.50.222:10811' export https_proxy='http://192.168.50.222:10811' git clone https://github.com/tnie/DayDayUp.git
|
QEMU 模拟器
在 amd64(3400g) + windows + qemu 上模拟 arm 架构安装 Kylin V10 ,延迟 10min+ 响应一次键盘事件。
摸索交叉编译试一试吧
软件仓库
系统环境:
1 2 3 4 5 6 7
| niel@ubuntu:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS" niel@ubuntu:~$ uname -a Linux ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
|
克隆仓库 需要较大的磁盘空间,下载过程也耗时比较久:
1 2 3
| apt install apt-mirror vim /etc/apt/mirror.list apt-mirror
|
针对 Kylin-Desktop-V10-SP1-General-Release-2303-arm64 ,以最小配置为例,需要准备 120G 的硬盘空间备用:
1 2 3 4 5 6 7 8 9 10 11
| ############# config ################## # set base_path /media/niel/idle set nthreads 4 set _tilde 0 # ############# end config ##############
deb-arm64 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1 main restricted universe multiverse deb-arm64 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1-2303-updates main restricted universe multiverse
|
提供服务:仓库克隆下来之后,${base_path} 随便拷贝、移动使用,比如拿到另一台设备上提供服务
1 2 3 4 5 6 7 8
| apt install nginx # view /etc/nginx/sites-available/default ln -s ${base_path}/mirror/archive.kylinos.cn/kylin /var/www/html/kylin # view /etc/nginx/nginx.conf chmod o+r ${base_path} # 确保拥有权限 chmod o+x ${base_path} # todo 解决权限问题 google systemctl restart nginx.service
|
访问 http://127.0.0.1/kylin/KYLIN-ALL/dists/10.1/Release 验证是否可用(是否解决权限问题)。
开发环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| # 改成能连接的、网速良好的镜像地址(或者内网中的镜像地址) vim /etc/apt/sources.list apt update apt autoremove apt --fix-broken install apt-get autoclean apt-get clean
apt install tcpdump tcpreplay wireshark apt install iperf3 apt install dos2unix minicom gimp ssh apt install unixodbc-dev apt install cmake git build-essential apt install gitk git-gui
apt install libxtst-dev # 或 apt install xorg-dev apt install libgdk-pixbuf2.0-dev apt install libnotify-dev
apt install libqt5charts5-dev apt install libqt5serialport5-dev apt install libqt5svg5-dev apt install libqt5webkit5-dev
apt install qt5-default apt install qtbase5-doc apt install qtbase5-doc-dev qtbase5-doc-html apt install qtbase5-examples qtbase5-private-dev apt install qtcreator apt install qtcreator-doc apt install qtmultimedia5-dev apt install qtpositioning5-dev apt install qttools5-dev
apt list --installed | grep qt # 不建议更新 # apt list --upgradable # apt upgrade
|
自行下载:
- typora 官网下载,解压直接使用。在桌面、开始菜单(
/usr/share/applications/)中手动增加 .desktop 方便使用。
- dm8 参考其安装手册,避免使用 root 用户安装。在常用账户(而非创建 dmdba 用户)下安装即可,方便使用客户端工具。
- Qt 5.13.2 放在常用账户的主目录下,在
/opt 中创建软链接:部分模块对原始安装目录 /opt 存在硬编码。
- Enclib 放在常用账户的主目录下,以便获取写权限。在
/opt 中创建软链接
- QtPdfium 从 GitHub 仓库克隆源码,依据其 README 自行编译,
make install 安装。
QtPdfium
此项目的代码量很小,通过 3、4 个类封装了 Pdfium 的使用。
在 arm 架构下需要打补丁:
1 2 3 4 5 6 7
| # 追加到 fx_lpng.pri 文件中 contains(QMAKE_HOST.arch, aarch64) { SOURCES += \ $$SOURCE_DIR/libpng16/arm/filter_neon.S \ $$SOURCE_DIR/libpng16/arm/filter_neon_intrinsics.c \ $$SOURCE_DIR/libpng16/arm/arm_init.c }
|
项目的价值在于它把 Pdfium 打包成了 Qt module ,make install 安装到 $QTDIR 之后方便使用:
类比使用 Qt Xml 等模块,避免手工添加头文件、库的依赖。
学习它如何组织三方库 Pdfium 的代码
QtPdfium 以源码形式使用 Pdfium ,而非先将后者编译成库再次使用。
学习制作 Qt module 如何组织代码
load(qt_parts) 和 load(qt_module) 特性做了什么?