银河麒麟V10 SP1 ARM编译QT源代码

最近因为一些事情需要在银河麒麟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

依赖安装以及报错

特殊情况

有几个需要说明的,不知道是我这个机子的问题还是什么。

  1. 推荐使用 apt-get 而不是 apt,貌似有的依赖包用 apt install 找不到

  2. 我这个系统的 /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

依赖安装

我从官方文档以及查阅各种资源总结的依赖

官方要求

银河麒麟V10 SP1 ARM编译QT源代码_第1张图片

总结合并
  1. 其中 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
  1. 如果要构建Qt docs的话
sudo apt-get install libclang-dev llvm
  1. 如果要使用相机需要安装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
  1. 有些模块需要依赖官网都找不到,比如相机那部分坑了我好久,后来才发现是少了依赖所以产物没有构建出来,具体缺少了什么模块的依赖还得自己去找了

报错

  1. 在执行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 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
  1. 编译进行两三个小时后,如果你的电脑内存小于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就好了,不知道怎么回事,有没有大佬知道情况的[拜托了]

你可能感兴趣的:(arm开发,qt,kylin)