最近因为一些事情需要在银河麒麟ARM系统上[银河麒麟V10 SP1 ARM 2203 linux5.4.96-11]安装QT5.12.4版本,由于QT官方不提供ARM版的安装包,无奈只能自己手动编译源代码。
后续补充:实际上我要装的是Qt5.14.2 而不是 5.12.4,不过同样的环境下Qt5.14.2也编译成功了。
这是一篇个人笔记,对这段时间的工作进行总结,如果能帮到各位那再好不过。鄙人才疏学浅,大佬轻喷。
建议和官方文档一起阅读。
Qt-5构建文档
QtWebEngine/How_to_Try
QtWebEngine Platform Notes
构建
代码路径千万不要有中文
建议阅读完 依赖安装以及报错
再开始构建
执行命令之前先安装这个,在文档中有说明
sudo apt-get install build-essential libgl1-mesa-dev
确认是否构建QTWebEngine
如果跳过的话,执行这段命令。后面执行make大概在1小时左右(麒麟海思芯片9006c)。
# 路径换成你自己的
./configure -skip webengine --prefix=/home/johnson/Qt5.12.4/
如果选择构建web引擎。时间会很漫长。原因是因为chromium编译很吃内存,swap分区的速度比内存还是慢很多的。
# -webengine-proprietary-codecs: 启用对专有编解码器的支持,支持chromium,可以播放视频
./configure \
--prefix /home/johnson/Qt5.12.4 \
-opensource \
-confirm-license \
-nomake examples \
-nomake tests \
-release \
-webengine-proprietary-codecs \
--pcre=qt
开始构建
nproc是获取CPU的线程数,可以多线程构建;如果你还要用电脑干其他活,可以少给几个线程,比如make -j4。
sudo make -j$(nproc)
sudo make install
依赖安装以及报错
特殊情况
有几个需要说明的,不知道是我这个机子的问题还是什么。
-
推荐使用 apt-get 而不是 apt,貌似有的依赖包用 apt install 找不到
-
我这个系统的 /etc/apt 目录下的sources.list总是莫名其妙自己变成下面这段(有可能是系统没激活的原因),导致apt-get update更新不了,而且找不到依赖。如果你的机子也有这种问题,在后面 apt-get 找不到依赖的时候可以看看sources.list是不是变了。
# 本文件由源管理器管理,会定期检测与修复,请勿修改本文件
deb https://archive.kylinos.cn/kylin/KYLIN-ALL 10.1-wayland-2203-fix-disk main
实际上在系统重装开机过后是这个,备份一下sources.list,然后 chattr +i ./sources.list 锁定文件。当然了,我的系统架构和版本和你们都不一定一样,sources.list也有所区别。
deb https://archive.kylinos.cn/kylin/KYLIN-ALL/ 10.1-wayland-2203-updates main universe restricted multiverse
deb https://archive.kylinos.cn/kylin/KYLIN-ALL/ 10.1-kirin9006C-feature main
deb https://archive2.kylinos.cn/deb/kylin/production/PART-10_1-kirin9a0/custom/partner/10_1-kirin9a0 default all
这是一段
Kylin V10 SP1 x86_64 2303
环境下的源,我给别人更新缓存的时候发现一直不成功,后来发现也是源的问题,如下是正确的
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1 main restricted universe multiverse
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1-2303-updates main restricted universe multiverse
deb http://archive2.kylinos.cn/deb/kylin/production/PART-V10-SP1/custom/partner/V10-SP1 default all
依赖安装
我从官方文档以及查阅各种资源总结的依赖
官方要求
总结合并
- 其中
libsrtp0-dev
这个依赖在我平台上升级为了libsrtp2-dev
sudo apt-get install bison build-essential gperf flex python2 libasound2-dev \
libcups2-dev libdrm-dev libegl1-mesa-dev libnss3-dev libpci-dev libpulse-dev \
libudev-dev nodejs libxtst-dev gyp ninja-build libssl-dev libxcursor-dev \
libxcomposite-dev libxdamage-dev libxrandr-dev libfontconfig1-dev libxss-dev \
'libsrtp0-dev' libwebp-dev libjsoncpp-dev libopus-dev libminizip-dev libavutil-dev \
libavformat-dev libavcodec-dev libevent-dev libvpx-dev libsnappy-dev libre2-dev \
libprotobuf-dev protobuf-compiler gcc g++ libssl-dev libxcursor-dev libxcomposite-dev \
libxrandr-dev libdbus-1-dev ffmpeg libavutil-dev libavformat-dev libavcodec-dev libevent-dev \
libxcb-xfixes0-dev xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev \
libfontconfig1-dev xorg-dev libclipper-dev
- 如果要构建Qt docs的话
sudo apt-get install libclang-dev llvm
- 如果要使用相机需要安装gstreamer
sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc 1.0-tools
- 有些模块需要依赖官网都找不到,比如相机那部分坑了我好久,后来才发现是少了依赖所以产物没有构建出来,具体缺少了什么模块的依赖还得自己去找了
报错
- 在执行make install期间链接库报错。
/usr/bin/ld.gold: error: cannot find -lclip2tri
/usr/bin/ld.gold: error: cannot find -lpoly2tri
/usr/bin/ld.gold: error: cannot find -lclipper
.obj/qgeopath.o:qgeopath.cpp:function QGeoPathPrivate::polygonContains(QGeoCoordinate const&) const: error: undefined reference to ‘c2t::clip2tri::pointInPolygon(QtClipperLib::IntPoint const&, std::vector<QtClipperLib::IntPoint, std::allocatorQtClipperLib::IntPoint > const&)’
collect2: error: ld returned 1 exit status
make[3]: *** [Makefile:220: …/…/lib/libQt5Positioning.so.5.12.4] Error 1
安装这个解决了
sudo apt-get install libclipper-dev
- 编译进行两三个小时后,如果你的电脑内存小于8G有可能会终止编译,并出现下面这两段。
g++: fatal error: 已杀死 signal terminated program cc1plus
ninja: build stopped: subcommand failed.- 造成这个错误的原因是因为系统资源不足,可以重新执行make尝试一下。
- 还可以扩大系统的swap分区
`先查看一下swap的大小` free -h `我这边是2G,但是我的交换分区是8G,执行下面这段查看,猜测是swap_file(系统自带)没有计算在其中` sudo swapon --show `输出大概如下` > /dev/zram0 partition 2G > /swap_file file 8G `/swapfile_1路径是可以更换的,银河麒麟系统通常有数据盘,数据盘很大,我一般选择这样/data/swap/swapfile_1` fallocate -l 8G /swapfile_1 chmod 600 /swapfile_1 mkswap /swapfile_1 swapon /swapfile_1 `然后编辑文件` vim /etc/fstab `在最后一行写入` /swapfile_1 swap swap defaults 0 0 `执行完成之后,资源管理器中可能还是没变化,查询一下` sudo swapon --show `如果存在/swapfile_1应该就是可以了,查询swap看看容量是否变化了` free -h `容量变成了9G,应该是刚才新增的8G起作用了`
- 或者make时少分配几个线程
环境变量
vim ~/.bashrc
在最后一行添加
# 路径换成你自己的
export PATH=/home/johnson/Qt5.12.4/bin:$PATH
然后执行
source ~/.bashrc
结束
经过六七个小时的编译,终于成功了。
我的QtWebEngine在--multi-process
模式下偶尔会莫名的崩溃(崩溃status是QWebEnginePage::CrashedTerminationStatus (2),code是139;简单的html网页不会崩),需要reload web引擎才行;换成--single-process
就好了,不知道怎么回事,有没有大佬知道情况的[拜托了🙏🙏🙏]