头图

0.基础环境

类别:笔记本
型号:中国长城 NF14C
硬件平台:飞腾处理器(ArmV8 指令集)
系统:银河麒麟操作系统 V10 SP1(2203)

关键词:
信创,麒麟系统,linux,c++,c,飞腾,qt,qt5,qt6,qtsdk编译

1.背景

QT是Linux下或嵌入式环境下,主流的跨平台软件开发平台,丰富和成熟的生态工具,许多开源软件都是基于QT所研发,系统仓库或商店内置的版本大部分情况下都满足我们的需求。但是部分软件对QT SDK (qmake)均有版本要求,因此本文通过几天的实践,试错,为大家提供一个可供参考的过程。

2.QT5.15.8 SDK编译安装过程

2.1 参考资料

2.1.1 官方参考资料

1.https://doc.qt.io/qt-5/linux-building.html
2.https://wiki.qt.io/Building_Qt_5_from_Git
3.https://doc.qt.io/qt-5/configure-options.html

2.1.2 其他参考资料

1.http://c.biancheng.net/view/3851.html
国内镜像网站
这里给大家推荐几个国内著名的 Qt 镜像网站,主要是各个高校的:

    中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
    清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
    北京理工大学:http://mirror.bit.edu.cn/qtproject/
    中国互联网络信息中心:https://mirrors.cnnic.cn/qt/

2.2 QTSDK源代码下载

https://download.qt.io/archive/qt
图片.png
https://download.qt.io/archive/qt/6.3/6.3.1/single/
图片.png
文件夹说明
图片.png

2.3 环境准备

注意:arm64官方没有发行,只能下载自己编译。编译时请保证系统干净(我在一台装过QT5.12的电脑上总会出现一些错误,在干净的系统上很顺利)。

2.3.1 移除自己手动安装的QT5以及相关的creator(后面再装即可)

sudo apt-get remove  qt5-default qt5-doc qt5-doc-html qtbase5-doc-html qtbase5-examples qt5-qmake qt5-qmake-bin -y  #卸载现有QT5,不然在make时容易出现各种错误,还找不到原因,保持环境尽量干净。如果这些操作还不行,为保证成功率就想办法弄一个干净初装的系统进行处理。
sudo autoremove #卸载不必要的依赖

2.3.2 根据官方说明安装相关依赖

根据官方使用GIT从源码构建,安装相关依赖

sudo apt-get install build-essential perl python3 git  -y
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev -y 
sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby ruby-dev -y
sudo apt-get install libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison -y
sudo apt-get install libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev -y
sudo apt install clang libclang-dev -y

qtweb还可能用到nodejs,通过nvm-cli安装node,参考:专栏第十五篇 https://segmentfault.com/a/1190000041978634

2.3.3 相关目录设置

将sdk源码解压到自定义文件夹,进行编译

sudo chmod -R 777 * #在qt-everything-src目录中把权限全部放开
mkdir ~/sdk/qt/qt-everywhere-build-5.15.8 #将构建的文件和源代码分开,文件夹名称不限自己知道就行

我是这样的
图片.png

2.3.4 编译安装

cd ~/sdk/qt/qt-everywhere-build-5.15.8
~/sdk/qt/qt-everywhere-src-5.15.8/configure -prefix /opt/Qt5.15.8 -platform linux-g++ #配置,没有prefix默认安装在/usr/local/Qt-%VERSION%;默认使用clang,可以通过platform参数指定编译平台
make -j 8 #编译,8代表同时用几个线程,建议为了加速设置为CPU的线程数。也可以加到16个这样的,因为中间除了编译还有许多make动作。如果出现权限错误,则使用sudo提权。
make install #安装,如果报权限错,用sudo make install 重试

2.3.5 系统变量设置

方式一:
配置系统路径
vim ~.bashrc
添加

PATH=/opt/Qt5.15.8/bin:$PATH #这里使用配置的地址,默认在configure不配置时,则使用是/usr/local/Qt-%VERSION%/bin

图片.png
使其生效source ~/.bashrc
执行qmake -version确认效果
图片.png
方式二:
如果系统中装了qt5-default,则目录在/usr/lib/qt5/,把这里面的全部删除,再把编译好的包对应的文件复制过去也是可以的。

2.3.6 QtCreator中配置

打开qt creator,点工具|选项菜单
图片.png
我的qmake位置如下(cmake不用配置,已自动检测到),刚刚编译的可以手动添加指定
图片.png
kits配置好
图片.png
图片.png

2.4 SDK安装包制作

2.4.1 deb包方式制作

//todo

2.4.2 appimage包方式制作

//todo

3.QT6编译安装过程

实验版本:qt6.4.3
图片.png

3.1 基础准备

国内镜像网站
这里给大家推荐几个国内著名的 Qt 镜像网站,主要是各个高校的:

    中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
    清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
    北京理工大学:http://mirror.bit.edu.cn/qtproject/
    中国互联网络信息中心:https://mirrors.cnnic.cn/qt/

3.2 QT SDK源代码下载

https://download.qt.io/archive/qt
图片.png
https://download.qt.io/archive/qt/6.4/6.4.3/single/
图片.png

3.3 目录设置

图片.png

3.4 参考资料

https://doc.qt.io/qt-6/linux-requirements.html
https://doc.qt.io/qt-6/linux-building.html
https://www.tal.org/tutorials/building-qt-62-raspberry-pi-ras...
安装依赖

sudo apt install ninja-build python3 -y 
sudo apt install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev -y
pip install html5lib #qtpdf depend
sudo apt-get install libmd4c-dev libmd4c0 -y
sudo apt-get install libatspi2.0-dev libatspi2.0-0 -y
sudo apt-get install libopengl0 libopengl-dev -y
sudo apt-get install libgles2-mesa-dev libgbm-dev libdrm-dev libvulkan-dev vulkan-tools vulkan-utils -y
sudo apt install libpq-dev libmariadbclient-dev libcups2-dev libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libxcb-xinput-dev  libsctp-dev -y
sudo apt-get install -y libboost1.71-all-dev libudev-dev libinput-dev libts-dev libmtdev-dev libjpeg-dev libfontconfig1-dev libssl-dev libdbus-1-dev libglib2.0-dev libxkbcommon-dev libegl1-mesa-dev libgbm-dev libgles2-mesa-dev mesa-common-dev libasound2-dev libpulse-dev gstreamer1.0-omx libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev  gstreamer1.0-alsa libvpx-dev libsrtp2-dev libsnappy-dev libnss3-dev "^libxcb.*" flex bison libxslt-dev ruby gperf libbz2-dev libcups2-dev libatkmm-1.6-dev libxi6 libxcomposite1 libfreetype6-dev libicu-dev libsqlite3-dev libxslt1-dev -y
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libx11-dev freetds-dev libsqlite0-dev libpq-dev libiodbc2-dev firebird-dev libgst-dev libxext-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxi-dev libdrm-dev libxcb-xinerama0 libxcb-xinerama0-dev libatspi2.0-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxss-dev libxtst-dev libpci-dev libcap-dev libxrandr-dev libdirectfb-dev libaudio-dev libxkbcommon-x11-dev -y
sudo apt remove libzstd-dev libharfbuzz-bin libharfbuzz-dev -y

3.5 编译安装

3.5.1 cmake准备

由于要求3.20以上的cmake,而仓库的cmake是3.16.3,这里我们需要先下载最新的cmake安装。
进入https://cmake.org/download/
image.png
下载aarch,下载链接:https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-aarch64.sh

cd ~/下载 #指定下载位置
wget https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-aarch64.sh #下载
chmod 755 cmake-3.26.3-linux-aarch64.sh #赋予可执行权限
subo bash cmake-3.26.3-linux-aarch64.sh #执行安装,需要同意license

输入安装位置,其实是解压了。我这里指定位置到/opt/cmake/cmake-3.26.3-linux-aarch64
图片.png
添加路径变量vim ~/.bashrc,添加如下内容

export PATH="$PATH:/opt/cmake/cmake-3.26.3-linux-aarch64/bin"

使设置生效source ~/.bashrc
确认是否成功cmake --version
图片.png

3.5.2 进入编译

cd ~/sdk/qt/qt-everywhere-build-6.4.3
~/sdk/qt/qt-everywhere-src-6.4.3/configure -prefix /opt/Qt6.4.3 #配置,没有prefix默认安装在/usr/local/Qt-%VERSION%;默认使用clang,可以通过platform参数指定编译平台
cmake --build . --parallel 4 #Then proceed with building the libraries and tools,官方推荐使用cmake --build . --parallel,但考虑到我本机是4线程的ft2000,直接使用--parallel会死机.大家可以根据自己的机器性能(CPU线程与核数进行调整),大家可以去忙别的了,这个要很久。
sudo ln -s  /opt/cmake/cmake-3.26.3-linux-aarch64/bin/cmake /usr/bin/cmake #建立软链接 ,不然sudo找不到命令
sudo cmake --install . #安装,需要sudo

图片.png

3.6 系统变量设置

方式一:
配置系统路径
vim ~.bashrc
添加

PATH=/opt/Qt6.4.3/bin:$PATH #这里使用配置的地址,默认在configure不配置时,则使用是/usr/local/Qt-%VERSION%/bin

图片.png
使其生效source ~/.bashrc
进入安装目录,执行qmake -version确认效果
图片.png

写在最后

做为跨平台的代表,没有提供各个版本的ARM版本,着实有点不应该。未来国产RISC-V的时候,可能还需要经历这一些。

麒麟系统专栏:
地址一:https://segmentfault.com/blog/kylinos
邮箱:1179611323@qq.com
群:662512340
github:https://github.com/xiaohelong
twitter:https://twitter.com/xiaohelong
发行日志:
20230404 首发
20230404 13:30 补充编译好的文件覆盖现有的版本,进行升级
20230408 13:00 增加QT6(以qt sdk 6.4.3)编译教程


码上世界
74 声望280 粉丝

码农极客,2004年接触Linux世界。爱技术的IT的男