0%

在 Ubuntu 上搭建 Qt 开发环境

搭建环境:

  • Qt 在 Qt5.12.12 之前提供 Windows/Linux/Mac 离线安装包,只有 x86 架构的
  • Qt 目前已经支持 ARM 架构,但只有在线安装包
  • Qt 从源码构建安装,费时费力还容易出错。我还没掌握
  • Qt 在 Linux 还可以通过各系统的软件仓库安装,版本陈旧,也需要联网

软件仓库

系统环境:

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) 特性做了什么?